2016-08-04 9 views
0

Ich versuche zu verstehen, wie NUR das letzte Datum eines Datensatzes aus einem Join ausgewählt wird. Meine People-Entität ist mit einer Membership-Entität verbunden. Meine Mitgliedschaft Unternehmen haben eine RefMembershipStatus Einheit .. ich einen Versuch nur das aktuelle Datum aus der Mitgliedschaft Einheit wählen ... Mein schließt sich wie folgt aussehen:CriteriaBuilder größtes Datum nur

 Join<People, Membership> membershipPath = root.join(People_.membershipList); 

     //Membership has property: Membership_.membershipStatusDate -- I must retrieve ONLY the latest (most current) date in membershipStatusDate.. 

     Join<Membership, RefMembershipStatus> progPath = membershipPath.join(Membership_.refMembershipStatus); 
     predicateList.add(cb.and(progPath.in(selectedStatus))); 

Antwort

0

Es gibt zwei Möglichkeiten, wie Sie dies tun können.

Entweder müssen Sie ein Prädikat hinzufügen, das das maximale Datum findet. In der CriteriaBuilder API würden Sie die greatest Methode verwenden. Es würde wie folgt aussehen:

Root<Membership> membership = criteria.from(Membership.class); 
predicateList.add(cb.greatest(membership.get(Membership_.membershipStatusDate))); 

Oder Sie könnten orderBy verwenden und wählen Sie dann nur das erste Ergebnis mit getFirstResult:

criteriaQuery.orderBy(cb.desc(membership.get(Membership_.membershipStatusDate))); 
entityManager.createQuery(criteriaQuery).getFirstResult(); 
Verwandte Themen