本文介绍了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条件查询构建器:获取最后一个条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 02:36