Spring Data JPA 存储库 findAllInList 包括 null

问题描述 投票:0回答:1

我有一个 Spring JPA 存储库:

@Repository
interface UserRepository extends JpaRepository<User, Integer> {

  List<User> findByTypeIn(List<String> types);
}

我想将具有

User
type is null
实体包含到此方法的结果中。我尝试了诸如
findByTypeInOrTypeIsNotNull
或 `findByTypeIsNullOrIn 之类的东西,但它不起作用。有办法做到这一点吗?

java spring-data-jpa spring-data
1个回答
0
投票

我了解您的 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);
}

这些自定义查询方法应该有效地获取您正在查找的用户,包括具有指定类型的用户和没有任何类型的用户。

© www.soinside.com 2019 - 2024. All rights reserved.