Java JPA查询-如何获得特定的结果集?

Java JPA查询-如何获得特定的结果集?,java,database,jpa,jpa-2.0,Java,Database,Jpa,Jpa 2.0,在基于JPA2/Hibernate/Oracle+Spring+Wicket的应用程序中,我使用以下模型: public class Item { private String name; private Set<Application> apps; private ... } public class Application { private String applicant; private Item item; private Status status; p

在基于JPA2/Hibernate/Oracle+Spring+Wicket的应用程序中,我使用以下模型:

public class Item {
 private String name;
 private Set<Application> apps;
 private ...
}

public class Application {
 private String applicant;
 private Item item;
 private Status status;
 private ...
}
公共类项目{
私有字符串名称;
私人设置应用程序;
私有的
}
公共类应用程序{
私人字符串申请人;
私人物品;
私人身份;
私有的
}
项目和应用程序之间的映射是,每个项目都有许多应用程序,每个应用程序只指向一个项目

现在我想搜索满足一组复杂条件的应用程序,如果结果集是一组成对的>(不能只设置,因为通常只有特定项的应用程序的子集才能满足条件),那就太好了


你能给我推荐一种方法吗?我的第一个想法是首先查询pairs,然后遍历这些pairs并手动生成结果集,但这似乎非常麻烦且无效

如果您想在单个查询中表达它(因此,您使用
JOIN
来表达
应用程序上的条件),查询对是唯一的方法-这就是关系数据库的工作方式。

我建议使用带有元组和子查询的JPA2条件查询。(伪代码)行中的某些内容:

CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery crit=cb.createTupleQuery();
子查询

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> crit = cb.createTupleQuery();
Subquery<Application> subquery = cb.subquery(Application.class);
subquery.where(...);
subquery.correlate(...);
crit.select(cb.tuple(cb.from(Item.class), subquery);