JPA Query With If Else 条件检查 IS NULL 或 IS NOT NULL 或忽略条件

时间:2021-07-22 06:19:32

标签: java postgresql jpa

我有以下使用 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);

试图仅通过一个查询来实现。

0 个答案:

没有答案