Ho una classe , che contiene uno List<Hearing>
, ognuno con un attributo Date
.SELECT DISTINCT + ORDER BY in API JPA 2 Criteria
ho bisogno di selezionare tutte le Lawsuit
s ordinata secondo la data della loro Hearing
s
Ho un CriteriaQuery come
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Lawsuit> cq = cb.createQuery(Lawsuit.class);
Root<Lawsuit> root = cq.from(Lawsuit.class);
Io uso distinta per appiattire i risultati:
cq.select(root).distinct(true);
I then joinLawsuit
con Hearing
Join<Lawsuit, Hearing> hearing = root.join("hearings", JoinType.INNER);
per creare Predicate
s
predicateList.add(cb.isNotNull(hearing.<Date>get("date")));
e Order
s:
orderList.add(cb.asc(hearing.<Date>get("date")));
Tutto funziona bene se evito distinct
, ma se lo uso, si lamenta di non essere in grado di ordinare in base a campi che non si trovano in SELECT:
Caused by: org.postgresql.util.PSQLException: ERROR: for
SELECT DISTINCT
,ORDER BY
expressions must appear in select list
Il List<Hearing>
è già accessibile attraverso i Lawsuit
classi restituito, così mi sono confuso: come dovrei aggiungerli alla lista di selezione?
Beh, avete bisogno di una sub-select per l'elenco e allora forse si può mettere l'ordine nella sotto-selezione? Non ho tempo per guardarlo adesso. –
Grazie @Nicholas; come faresti la query interiore con criteri API? –
[Questa risposta] (http://stackoverflow.com/a/35915532/4754790) potrebbe essere utile. –