本文介绍了JPA条件查询构建器:获取最后一个条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前正在使用JPA CriteriaBuilder构建复杂的查询.
在这个查询中,我加入了一些数据库.现在,我只需要一个联接表的最后一个条目.但是我不知道在查询中必须在哪里应用.
I am currently building a complex query with JPA CriteriaBuilder.
In this query i join a little databases. Now i need only the last Entry of a joined Table. But i don't know where i must applicate that in the query.
这是一个虚拟的JPA查询:
Here is a dummy JPA query:
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
的最后一个条目,我该怎么做?
Now i need only the last entry of the ListJoin class3
, how can i do this?
问候
推荐答案
我找到了解决方案.
我需要添加以下代码:
I have found a solution.
I needed to add the following code:
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));
我希望我能帮助别人.
这篇关于JPA条件查询构建器:获取最后一个条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!