【发布时间】:2022-01-26 04:22:15
【问题描述】:
请问这个 Spring Data JPA 方法:
List<Foo> findAllByXOrYAndZ();
表示两者的逻辑情况:
(X || Y) && ZX || (Y && Z)
我怎样才能用 Spring Data 生成的查询来表示另一个?
【问题讨论】:
标签: spring spring-data-jpa spring-data boolean-logic
请问这个 Spring Data JPA 方法:
List<Foo> findAllByXOrYAndZ();
表示两者的逻辑情况:
(X || Y) && Z X || (Y && Z)我怎样才能用 Spring Data 生成的查询来表示另一个?
【问题讨论】:
标签: spring spring-data-jpa spring-data boolean-logic
代表:X || (Y && Z)。
对于List<Foo> findAllByXOrYAndZ();,Hibernate 将执行的查询将是:
select
*columns*
from
*table*
where
x = ?
or y = ?
and z = ?
注意查询的 WHERE 子句。知道 AND 比 OR 操作具有更高的优先级,等效的 WHERE 子句将是:
where
x = ? or ( y = ? and z = ? )
Hibernate 会自动删除括号,因为它们不需要。
我通常会避免使用这些方法,因为它们的可读性不强。您应该使用带有 @Query 的自定义查询。
【讨论】: