我有一個類Lawsuit
,它包含一個List<Hearing>
,每個屬性都有一個Date
屬性。在JPA 2標準API中選擇DISTINCT + ORDER BY API
,我需要選擇所有Lawsuit
S按日期排序他們Hearing
小號
我有一個CriteriaQuery中像
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Lawsuit> cq = cb.createQuery(Lawsuit.class);
Root<Lawsuit> root = cq.from(Lawsuit.class);
我用不同扁平化的結果:
cq.select(root).distinct(true);
然後我加入Lawsuit
與Hearing
Join<Lawsuit, Hearing> hearing = root.join("hearings", JoinType.INNER);
創建Predicate
小號
predicateList.add(cb.isNotNull(hearing.<Date>get("date")));
和Order
S:如果我避免distinct
orderList.add(cb.asc(hearing.<Date>get("date")));
一切工作正常,但如果我使用它,它抱怨不能夠根據不在SELECT中的字段進行訂購:
Caused by: org.postgresql.util.PSQLException: ERROR: for
SELECT DISTINCT
,ORDER BY
expressions must appear in select list
List<Hearing>
已經可以通過Lawsuit
類返回,所以我很困惑:我應該如何將它們添加到選擇列表中?
好吧,你需要一個子選擇的列表,然後也許你可以把訂單在子選擇?我現在沒有時間看它。 –
謝謝@Nicholas;你將如何使用標準api來進行內部查詢? –
[This answer](http://stackoverflow.com/a/35915532/4754790)可能會有所幫助。 –