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

时间:2010-10-25 09:25:51

标签: 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;
 private ...
}

Item和Application之间的映射是每个项目都有很多应用程序,每个应用程序只指向一个项目。

现在我想搜索满足一组复杂条件的应用程序,如果结果集是一组对,那就很好了。项目,列表&lt;申请&gt;&gt; (它不能只是Set&lt; Item&gt;,因为通常只有特定项目的应用程序子集才能满足标准。)

你能推荐我一个怎么做的方法吗?我的第一个想法是首先查询对&lt; ItemID,AppID&gt;然后迭代这些并手动生成结果集,但它看起来非常麻烦且无效。

2 个答案:

答案 0 :(得分:1)

如果你想在一个查询中表达它(所以,你使用JOIN来表达Application s上的标准),查询对是唯一的方法 - 这是关系的方式数据库工作。

答案 1 :(得分:0)

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

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);

这是伪代码,因为我现在脑子里没有确切的子查询语法,没有Eclipse可以尝试,对不起。在Keith, Schincariol. Pro JPA 2: Mastering the Java Persistence API中有一个很好的子查询介绍。