【发布时间】:2016-10-31 21:23:09
【问题描述】:
我有一个类Lawsuit,它包含一个List<Hearing>,每个都有一个Date 属性。
我需要选择所有按Hearings 日期排序的Lawsuits
我有一个类似的 CriteriaQuery
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Lawsuit> cq = cb.createQuery(Lawsuit.class);
Root<Lawsuit> root = cq.from(Lawsuit.class);
我使用 distinct 来展平结果:
cq.select(root).distinct(true);
然后我加入 Lawsuit 和Hearing
Join<Lawsuit, Hearing> hearing = root.join("hearings", JoinType.INNER);
创建Predicates
predicateList.add(cb.isNotNull(hearing.<Date>get("date")));
和Orders:
orderList.add(cb.asc(hearing.<Date>get("date")));
如果我避免使用distinct,一切正常,但如果我使用它,它会抱怨无法根据不在 SELECT 中的字段进行排序:
原因:org.postgresql.util.PSQLException: ERROR: for
SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
List<Hearing> 已经可以通过返回的Lawsuit 类访问,所以我很困惑:我应该如何将它们添加到选择列表中?
【问题讨论】:
-
好吧,您是否需要列表
的子选择,然后也许您可以在子选择中按顺序排列?我现在没时间看。 -
谢谢@Nicholas;您将如何使用条件 api 进行内部查询?
-
This answer 可能会有所帮助。
-
我不使用 Criteria API,但在那里编写子查询应该也很简单。
-
@DraganBozanovic:应该,我同意,但我不知道如何做到这一点(对于带有 Criteria API 的选定字段)。顺便说一句,我发现问题出在连接中(真是个笨蛋)。随意回答一些关于独特和连接的规范和更通用的用途(不涉及 Criteria API),我会奖励你。干杯
标签: java postgresql jpa jpa-2.0 criteria-api