tri*_*rix 5 java hibernate jpql
我有一个@NamedQuery这样的
select i from MyTable i
where
(i.streetId = :streetId and i.cityId = :cityId)
or
(i.streetId is null and i.cityId = :cityId)
or
(i.streetId = :streetId and i.cityId is null)
Run Code Online (Sandbox Code Playgroud)
不知何故,Hibernate 将括号重新排列为
Hibernate:
select
mytable0_.id as id1_14_,
mytable0_.version as version2_14_,
mytable0_.streetId as streetI3_14_,
mytable0_.cityId as cityId7_14_
from
myTable mytable0_
where
mytable0_.streetId=?
and mytable0_.cityId=?
or (
mytable0_.streetId is null
)
and mytable0_.cityId=?
or mytable0_.streetId=?
and (
mytable0_.cityId is null
)
Run Code Online (Sandbox Code Playgroud)
为什么要这样做?(它们可能是等价的,但我更喜欢更简单的 where 子句)
当前的解决方法是用本机 SQL 编写它,但我只是想知道这是否是一个已知问题。
小智 7
由于在 SQL 查询执行中“AND”操作比“OR”操作具有更高的优先级,因此 hibernate 删除了不必要的大括号,使得 hiberante 查询生成的结果与命名查询返回的结果相同。例如:在 SQL 执行中:
A 和 B 或 C 和 D 或 E 和 F == (A 和 B) 或 (C 和 D) 或 (E 和 F)。
| 归档时间: |
|
| 查看次数: |
6205 次 |
| 最近记录: |