【问题标题】:Join two tables with Hibernate Criteria使用 Hibernate Criteria 加入两个表
【发布时间】:2012-01-11 19:08:35
【问题描述】:

以以下实体为例:

Entity Child {
    long id;
    String name;
    long parentKey;
}

Entity Parent {
    long id;
    String desc;
}

有没有办法使用 Hibernate Criteria 查询:

select * from Child c, Parent p 
         where c.parentKey = p.id and c.name = "whatever" and p.desc = "whatever"

我们主要关心的是如何跨两个仅相关的实体加入 Criteria 按长键

假设我们不能将 Parent 的引用直接放在 Child 中。

【问题讨论】:

  • “没有直接在我们的孩子中引用父母”意味着它是从父母到孩子的单向关系
  • 它们必须是多头吗?你能为孩子创建一个 Key 对象吗?

标签: hibernate hibernate-criteria


【解决方案1】:

好吧,不确定您指的是哪个 Hibernate 版本,但在 JPA 2.0 中可能会出现这样的情况:

String query = "SELECT c FROM Child c, Parent p WHERE c.parentId = p.id";

List<Child> children = em.createQuery(query, Child.class).getResultList();

通过这种方式,您可以根据自定义条件明确地执行 JOIN,而不是让 JPA 管理它,尽管这样做是完全合法的。

【讨论】:

  • 您好 Piotr,感谢您的回复。如果我们希望结果集包含来自 Child 和 Parent(而不仅仅是 Child)的数据,我知道 HQL 可以处理,但是有什么方法可以使用 Criteria API?还是 Criteria 只允许返回特定类别的实体? (例如,父母或孩子,但不是两者)?
  • 我不太清楚如何理解它。我发布的查询只返回Child 实体,而不是Parent Child。能详细点吗?
  • 我否决了这个答案,因为问题是关于 Criteria API
猜你喜欢
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 2018-07-24
  • 2018-08-21
  • 1970-01-01
  • 2011-08-30
  • 2017-02-16
  • 2012-02-15
相关资源
最近更新 更多