Hibernate JPA查询与生成的sql查询不同
我在Spring存储库中有这个JPA查询定义Hibernate JPA查询与生成的sql查询不同,hibernate,spring-data-jpa,Hibernate,Spring Data Jpa,我在Spring存储库中有这个JPA查询定义 @Query(value="select rd.contractID as contractID, rd.gicCode as gicCode, count(rd) as ticketNo" + " from RawData rd" + " where rd.contractID is not null and ((rd.contractCostObject is null and rd.domestic = true
@Query(value="select rd.contractID as contractID, rd.gicCode as gicCode, count(rd) as ticketNo"
+ " from RawData rd"
+ " where rd.contractID is not null and ((rd.contractCostObject is null and rd.domestic = true) or (rd.mirrorSVO is null and rd.domestic = false))"
+ " group by rd.contractID, rd.gicCode")
但生成的SQL查询就是这个
select
rawdata0_.contractID as col_0_0_,
rawdata0_.gicCode as col_1_0_,
count(rawdata0_.id) as col_2_0_
from
RawData rawdata0_
where
(
rawdata0_.contractID is not null
)
and (
(
rawdata0_.contractCostObject is null
)
and rawdata0_.domestic=true
or (
rawdata0_.mirrorSVO is null
)
and rawdata0_.domestic=false
)
group by
rawdata0_.contractID ,
rawdata0_.gicCode
正如您所看到的,括号已更改,我相信两个查询中的条件不相同。
是虫子吗?
在postgresql数据库中使用hibernate with spring。和运算符的优先级高于
或
运算符
- 条件A和条件B或条件C和条件D
- (a和B)或(C和D)
((rawdata0_.contractCostObject is null) and rawdata0_.domestic=true)
or
((rawdata0_.mirrorSVO is null) and rawdata0_.domestic=false)
正是你想要的。JPA生成的查询是正确的。和运算符的优先级高于
或
运算符
- 条件A和条件B或条件C和条件D
- (a和B)或(C和D)
((rawdata0_.contractCostObject is null) and rawdata0_.domestic=true)
or
((rawdata0_.mirrorSVO is null) and rawdata0_.domestic=false)
正是你想要的。JPA生成的查询是正确的