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

mlu*_*own 3 java sql hibernate criteria

好的,所以以下查询:

SELECT O.*, P.* FROM ORDERS O, PRODUCT P WHERE
    O.ORDER_ID=P.ORDER_ID AND P.ID=’1234’;
Run Code Online (Sandbox Code Playgroud)

可以使用Criteria完成如下:

List ordersAndProducts = session.createCriteria(Order.class)
    .setFetchMode(“products”,FetchMode.JOIN)
    .add(Restrictions.eq(“id”,”1234”))
    .list();
Run Code Online (Sandbox Code Playgroud)

但是这里Criteria.list()返回一个List<Object[]>where Object[0]是a Order并且Object[1]ProductList中每个元素的a .

但是如何使用Criteria执行以下SQL:

SELECT O.* FROM ORDERS O, PRODUCT P WHERE 
    O.ORDER_ID=P.ORDER_ID AND P.ID=’1234’;
Run Code Online (Sandbox Code Playgroud)

换句话说,我想Criteria.list()给我一个List<Order>,我不在乎Products.我尝试使用createAlias()而不是setFetchMode()结果是相同的,并且Projections不允许您指定实体,只指定属性.

Oli*_*ann 6

您可以.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();
Run Code Online (Sandbox Code Playgroud)

现在您使用急切加载的产品检索所有订单.