我有以下使用 PostgreSQL 的 Java 8 查询。
@Query("select u from User u WHERE ((?1 = true AND u.address IS NOT NULL) OR (?1 = false AND u.address IS NULL) OR ?1 IS NULL) ")
Page<User> getUsersWithParams(Boolean hasAddress, Pageable paging);
以上查询未根据需要提供结果。
我在 JPA 中尝试了 if else 和 case when,但出现错误。
基于传递的布尔值真/假或无(未通过),我需要检查另一个字段。
最后,想想我们可以将字符串作为参数传递
Page<User> getUsersWithParams(String hasAddress, Pageable paging);
hasAddress 有 u.address IS NOT NULL 或 u.address IS NULL 或 NONE 值表示未通过。
知道如何实现这一目标吗?
现在我通过以下 3 个查询实现。
@Query("select u from User")
Page<User> getUsersWithParams(Pageable paging);
@Query("select u from User WHERE u.address IS NOT NULL")
Page<User> getUsersWithParamsWithAddress(Pageable paging);
@Query("select u from User WHERE u.address IS NULL")
Page<User> getUsersWithParamsWithOutAddress(Pageable paging);
试图仅通过一个查询来实现。