好了,下面的查询:
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中每个元素的List<Object[]>whereObject[0]是OrderandObject[1]是Product。
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()但结果是相同的,并且Projection不允许您指定实体,而只能指定属性。
List<Order>
Products
createAlias()
setFetchMode()
您可以.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)根据条件使用。
.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();
现在,您检索所有急切加载的产品的订单。