Hibernate标准 - 如何限制连接结果为单个实体类型? [英] Hibernate Criteria - how to limit join results to a single entity type?
问题描述
好的,所以下面的查询:
SELECT O. *,P. * FROM ORDERS O,PRODUCT P WHERE
O.ORDER_ID = P.ORDER_ID AND P.ID ='1234';
可以使用Criteria完成,如下所示:
List ordersAndProducts = session.createCriteria(Order.class)
.setFetchMode(products,FetchMode.JOIN)
.add(Restrictions.eq(id ,1234))
.list();
但这里 Criteria.list()
返回 List< Object []>
其中 Object [0]
是 Order
和
Object [1]
是列表中每个元素的 Product
。
但是我怎么能用Criteria做下面的SQL:
SELECT O. * FROM ORDERS O,PRODUCT P WHERE
O.ORDER_ID = P.ORDER_ID AND P.ID ='1234';
换句话说,我想要 Criteria.list()
给我一个 List< Order>
,我不在乎 Products
。我试过使用 createAlias()
而不是 setFetchMode()
,但结果是一样的,让你指定一个实体,只有一个属性。
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
标准。$ $ p $
列出ordersAndProducts = session.createCriteria(Order.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.setFetchMode(products,FetchMode.JOIN)
.add(Restrictions.eq(id,1234))
.list();
现在,您可以检索所有具有热切加载产品的订单。
Ok, so the following query:
SELECT O.*, P.* FROM ORDERS O, PRODUCT P WHERE
O.ORDER_ID=P.ORDER_ID AND P.ID=’1234’;
can be done with Criteria as follows:
List ordersAndProducts = session.createCriteria(Order.class)
.setFetchMode("products",FetchMode.JOIN)
.add(Restrictions.eq("id","1234"))
.list();
but here Criteria.list()
returns a List<Object[]>
where Object[0]
is an Order
and Object[1]
is a Product
for each element in the List.
But how can I do the following SQL with Criteria:
SELECT O.* FROM ORDERS O, PRODUCT P WHERE
O.ORDER_ID=P.ORDER_ID AND P.ID=’1234’;
In other words, I want Criteria.list()
to give me a List<Order>
, I don't care about the Products
. I've tried using createAlias()
instead of setFetchMode()
but the results are the same, and Projections don't let you specify an entity, only a property.
You can use .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
on the criteria.
List ordersAndProducts = session.createCriteria(Order.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.setFetchMode("products",FetchMode.JOIN)
.add(Restrictions.eq("id","1234"))
.list();
Now you retrieve all orders with eagerly loaded products.
这篇关于Hibernate标准 - 如何限制连接结果为单个实体类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!