【问题标题】:@Query with or, and@Query 使用 or 和
【发布时间】:2013-08-21 17:05:41
【问题描述】:

在我的数据库中,我有两种类型的用户:测试和生产。我有办法通过 id 或订单号搜索它们。在 db 中是带有布尔参数 isTest 的列(如果用户来自测试环境,则为 true,其他则为 false)。我必须使用免费参数(id、oorderId 和 isTest)在存储库(spring data、jpa)中进行查询,并且我只想显示产品用户。我做了一些 lkie 这个(但不起作用,我的意思是按 orderId 或 id 搜索是可以的,但布尔属性不是):

public interface UserRepository extends JpaRepository<User, Long>{

@Query(select u from User where u.orderId = ?1 or u.id = ?1 and isTest = false")
Page<User> searchUsers(Pageable pageable, String orderId, String id, boolean isTest);

} 感谢您的帮助

【问题讨论】:

    标签: mysql jpa spring-data


    【解决方案1】:

    Operator Precedence 中所述,AND 的优先级高于OR。因此,您当前的过滤器被评估为:

    WHERE u.orderId = ?1 OR (u.id = ?1 AND isTest = false)
    

    您应该添加显式括号以强制满足您的要求的优先级:

    WHERE (u.orderId = ?1 OR u.id = ?1) AND isTest = false
    

    【讨论】:

    • +1 始终使用括号来阐明含义是一种很好的做法,这样当您开始与必须了解您的代码的其他人一起工作时会更容易。
    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 2020-06-27
    • 2020-10-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多