@Query with或,和

时间:2013-08-21 17:05:42

标签: mysql jpa spring-data

在我的数据库中,我有两种类型的用户:测试和生产。我有通过id或订单号搜索它们的方法。在db中,列为boolean param isTest(如果用户来自test enviroment,则为true,对于其他用户为false)。我必须使用free params(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);

} 谢谢你的帮助

1 个答案:

答案 0 :(得分: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