【发布时间】:2017-05-16 23:17:33
【问题描述】:
我正在学习 Hibernate,我想知道在 HQL 查询中使用 JOIN 子句有什么用。我可能错了,但在我看来,你总是可以不用。
假设我有一个 ChildClass 实体,它与 ParentClass 具有映射的 @ManyToOne 关系。
现在我可以像这样构建一个 HQL 查询:
session.createQuery("FROM ChildClass ch WHERE ch.parentClass.id=1L")
如您所见,我可以通过父类的 id 字段过滤结果,通过子类访问它:ch.parentClass.id
如果我想在 SQL 中做同样的事情,我需要执行 JOIN,查询如下:
SELECT * FROM ChildTable ch
JOIN ParentTable p ON (ch.parent_id = p.id)
WHERE p.id=1;
如果我明白这一点,在 HQL 中我不需要在我的查询中包含任何 JOIN,因为 @ManyToOne 映射关系隐式地连接了这两个实体。那么为什么我会在 HQL 查询中使用 JOIN 呢?是否存在需要 JOIN 的特定情况?
【问题讨论】: