在 HQL 中加入无关联

Posted

技术标签:

【中文标题】在 HQL 中加入无关联【英文标题】:Join without association in HQL 【发布时间】:2010-11-01 17:24:01 【问题描述】:

假设我有两个表(A,B),例如:

A id, a, c
B id, b, c

我也有他们的实体。我想写一个 HQL,这样结果集就会像(其中 A.c = B.c):

(a1, b1, c1)
(a2, b2, c2)
(a3, b3, c3)
...

由于 hibernate 不支持 on 子句,我被卡住了,我不知道如何编写查询。

【问题讨论】:

【参考方案1】:

从 Hibernate +5.1 版本开始 Hibernate 引入了类似于不相关实体之间的 SQL 连接的连接查询。

例如。 Select a,b From Table a join Table b on a.id=b.id where condition

【讨论】:

这是一个非常古老的问题。添加解释为什么这个答案更好。【参考方案2】:

如果两个表都通过外键相互关联,那么你可以试试这个:

让:

A id(主键), a, c B id(外键), b, c

在 B 类的 pojo 中用 setter 和 getter 定义一个 parent(A) 类型的变量。之后你可以用这种方式编写查询。 让它'AA'

select tbl_b.a,tbl_a.a,tbl_b.b,tbl_a.b,tbl_b.c,tbl_a.c from B tbl_b inner join tbl_b.AA tbl_b

【讨论】:

【参考方案3】:

如果你想进行外部连接,你可以进行子查询和管理 OR 操作(它适用于我)。 它使查询更复杂,性能最差,但有效:-)

【讨论】:

【参考方案4】:

你必须使用交叉连接符号:

from A as table_a , B as table_b
where table_a.c = table_b.c

当然,没有办法以这种方式实现外连接,所以如果是你的情况,你可能会遇到一些麻烦。

有条件的类似情况参考:hibernate-criteria-joining-table-without-a-mapped-association

【讨论】:

@II-BHIMA 我可以在这种情况下使用左外连接

以上是关于在 HQL 中加入无关联的主要内容,如果未能解决你的问题,请参考以下文章

使用 HQL 急切加载嵌套关联

通过 HQL 的 Hibernate ScrollableResults 需要为每个关联获取左连接

Hibernate5-一对多双向关联-左外连接-HQL

Hibernate5-一对多双向关联-迫切左外连接-HQL

hibernate3.2多表关联查询常见问题

在 XTemplate 中加载关联的模型数据