gpt4 book ai didi

java - Hibernate Java 重新排列 SQL 中的括号

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:47:57 25 4
gpt4 key购买 nike

我有一个像这样的@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)

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
)

为什么要这样做?(它们可能是等价的,但我更喜欢更简单的 where 子句)

当前的解决方法是用原生 SQL 编写,但我只是想知道这是否是一个已知问题。

最佳答案

由于'AND'运算在SQL查询执行中比'OR'运算具有更高的优先级,hibernate删除了不必要的大括号,使得hiberante查询生成的结果与Named Query返回的结果相同。例如:在 SQL 执行中:

A 和 B 或 C 和 D 或 E 和 F ==(A 和 B)或(C 和 D)或(E 和 F)。

关于java - Hibernate Java 重新排列 SQL 中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23758072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com