我有一个 Spring JPA 存储库:
@Repository
interface UserRepository extends JpaRepository<User, Integer> {
List<User> findByTypeIn(List<String> types);
}
我想将具有
User
的 type is null
实体包含到此方法的结果中。我尝试了诸如 findByTypeInOrTypeIsNotNull
或 `findByTypeIsNullOrIn 之类的东西,但它不起作用。有办法做到这一点吗?
我了解您的 Spring Data JPA 存储库查询面临问题。您想要检索其类型与给定类型列表匹配的用户列表,但也包括没有类型(空值)的用户。不幸的是,您尝试使用
findByTypeInOrTypeIsNotNull
或 findByTypeIsNullOrIn
的直接方法在这种情况下不起作用。
要实现此目的,您可以在
UserRepository
界面中创建自定义查询方法。此方法将处理复杂性并为您提供所需的结果。具体方法如下:
@Repository
interface UserRepository extends JpaRepository<User, Integer> {
@Query("SELECT u FROM User u WHERE u.type IN :types OR u.type IS NULL")
List<User> findUsersWithTypesAndNull(@Param("types") List<String> types);
}
在此方法中,我们使用
@Query
注释来定义自定义 JPQL 查询。它选择类型存在于提供的类型列表中的用户或没有类型(空)的用户。
或者,如果 SQL 查询更符合您的风格,您可以使用此方法:
@Repository
interface UserRepository extends JpaRepository<User, Integer> {
@Query(value = "SELECT * FROM users u WHERE u.type IN :types OR u.type IS NULL", nativeQuery = true)
List<User> findUsersWithTypesAndNull(@Param("types") List<String> types);
}
这些自定义查询方法应该有效地获取您正在查找的用户,包括具有指定类型的用户和没有任何类型的用户。