jpa2 CriteriaBuilder顺序由" ORDER BY表达式必须出现在选择列表中#34;

时间:2015-02-04 18:37:18

标签: java hibernate sql-order-by jpa-2.0 criteriaquery

我正在使用 CriteriaBuilder 编写查询,但无法添加 order by 子句,因为错误时会抛出消息ORDER BY表达式必须出现在选择列表中这是我的实体。

public class A{
  Integer aId;
  @ManyToOne
  @JoinColumn(name = "bId", nullable = false)
  B       classB;
  //setter and getter.
}

public class B{
    Integer bId;
    String name;
    //setter and getter.

}

我的查询看起来像这样。

CriteriaBuilder cb = super.getEntityManager().getCriteriaBuilder();
        CriteriaQuery<A> cq = cb.createQuery(A.class);
        Root<A> aRoot = cq.from(A.class);
        Join<A, B> joinB = aRoot.join("b", JoinType.INNER);

        cq.distinct( true );

        cq.orderBy( cb.asc( joinB.get("name") ));

        return super.getEntityManager().createQuery(cq).getResultList();

这是hibernate生成的sql。

select
    distinct a0_.aId as aId,
    a0_.bId as bId,
from
    a a0_ 
inner join
    b b2_ 
        on a0_.aId=b2_.bId 
order by
    b2_.name asc //this is where the error comes

如你所见。 B 它不在 select 子句中。那么,我该如何添加 B

0 个答案:

没有答案