[英]JPA Criteria Query Builder: Get last Entry
我目前正在使用JPA CriteriaBuilder構建復雜的查詢。
在這個查詢中,我加入了一些數據庫。 現在我只需要一個聯接表的最后一個條目。 但是我不知道在查詢中必須在哪里應用。
這是一個虛擬的JPA查詢:
private CriteriaQuery<Class2> getClass2Function {
CriteriaQuery<RootClass> cq = cb.createQuery(RootClass.class);
Root<RootClass> root = cq.from(RootClass.class);
Join<RootClass, Class2> class2 = root.join(RootClass_.class2Id);
ListJoin<Class2, Class3> class3 = class2.join(Class2_.listOfClass3);
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.isNull(class3.get(SomeModel_.dtDl)));
predicates.add(cb.isNull(class2.get(SomeModel_.dtDl)));
predicates.add(cb.isNull(root.get(SomeModel_.dtDl)));
return cq.select(class2).where(predicates.toArray(new Predicate[] {}))
.orderBy(cb.asc(class2.get(Class2_.id)));
}
現在我只需要ListJoin class3
的最后一個條目,我該怎么做?
問候
我找到了解決方案。
我需要添加以下代碼:
Subquery<Long> sq = cq.subquery(Long.class);
Root<Class3> root = sq.from(Class3.class);
sq.select(cb.max(root.get(Class3_.id)));
predicates.add(cb.equal(class3.get(Class3_.id), sq));
我希望我能幫助某人。
首先,如果您關心列表中元素的順序,則需要@OrderColumn
批注。 依賴於維護列表順序的任何其他機制取決於數據庫和持久性提供程序,並且通常情況下是不可靠的。
假設您已經擁有了,那么您應該能夠在謂詞class3.order()
與cb.size(class3)
組合在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.