一尘不染

Hibernate Criteria-如何将联接结果限制为单个实体类型?

sql

好了,下面的查询:

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执行以下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不允许您指定实体,而只能指定属性。


阅读 157

收藏
2021-03-08

共1个答案

一尘不染

您可以.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();

现在,您检索所有急切加载的产品的订单。

2021-03-08