Hibernate标准 - 如何限制连接结果为单个实体类型? [英] Hibernate Criteria - how to limit join results to a single entity type?

查看:85
本文介绍了Hibernate标准 - 如何限制连接结果为单个实体类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,所以下面的查询:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆