好的,下面的查询:
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)
。
List ordersAndProducts = session.createCriteria(Order.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.setFetchMode(“products”,FetchMode.JOIN)
.add(Restrictions.eq(“id”,”1234”))
.list();
现在您检索所有带有急切加载产品的订单。
关于java - Hibernate Criteria - 如何将连接结果限制为单个实体类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377249/