0

我有一个要优化的工作 HQL 查询。如下:

select distinct A.id from Import as A, Place D 
where (A.place=D or A.placeBOK=D) and D.country=? 

I tried to replcae the query from above by the following:

select distinct A.id from Import as A
where A.place.country=? or A.placeBOK.country=?

除了性能之外,我认为这两个查询是等效的。但他们不是。第一个是交付一组 20 个对象,而第二个是仅交付 14 个对象。

我究竟做错了什么?

有什么提示吗?

4

2 回答 2

1

[更新]

您必须将查询重写为

select distinct A.id from Import as A LEFT JOIN A.place b LEFT JOIN A.placeBOK c
where b.country=? or c.country=?

您的第二个查询相当于:

select distinct A.id from Import as A INNER JOIN A.place b INNER JOIN A.placeBOK c
where b.country=? or c.country=?

也可以看看:

14.4. 连接语法的形式

HQL 支持两种形式的关联连接:隐式和显式。

上一节中显示的查询都使用显式形式,其中 join 关键字在 from 子句中显式使用。这是推荐的形式。

隐式形式不使用 join 关键字。相反,使用点符号“取消引用”关联。隐式连接可以出现在任何 HQL 子句中。隐式连接导致生成的 SQL 语句中的内部连接。

from Cat as cat where cat.mate.name like '%s%'
于 2009-05-28T14:19:38.400 回答
0

我不明白上面的答案,但也许你可以尝试调查查询 A 而不是查询 B 产生的 6 个结果......

于 2009-05-28T15:14:52.297 回答