【问题标题】:Order of boolean operations in Spring Data generated queriesSpring Data 生成的查询中布尔运算的顺序
【发布时间】:2022-01-26 04:22:15
【问题描述】:

请问这个 Spring Data JPA 方法:

List<Foo> findAllByXOrYAndZ();

表示两者的逻辑情况:

  • (X || Y) && Z
  • X || (Y && Z)

我怎样才能用 Spring Data 生成的查询来表示另一个?

【问题讨论】:

    标签: spring spring-data-jpa spring-data boolean-logic


    【解决方案1】:

    代表: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 的自定义查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 2019-02-20
      • 2022-01-23
      • 2017-08-31
      • 1970-01-01
      相关资源
      最近更新 更多