【问题标题】:JPA Query - how to get a specific result set?JPA Query - 如何获得特定的结果集?
【发布时间】:2011-04-30 02:54:19
【问题描述】:

在一个基于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 之间的映射是每个item 都有很多application,每个application 只指向一个item。

现在我想搜索满足一组复杂条件的应用程序,如果结果集是一组对 >(它不能只是 Set,因为通常只有特定项目的一部分应用程序会满足标准)。

你能给我推荐一个方法吗?我的第一个想法是先查询pair 然后遍历这些并手动生成结果集,但这似乎很麻烦且效率低下。

【问题讨论】:

    标签: java database jpa jpa-2.0


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我建议使用带有元组和子查询的 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 中有很好的子查询介绍。

      【讨论】:

        猜你喜欢
        • 2014-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 2017-12-15
        • 1970-01-01
        相关资源
        最近更新 更多