如何编写 JpaRepository 方法来搜索在 Set<String> 中存储了 phone 个号码的用户

How to write JpaRepository method for searching Users that have phone number stored in Set<String>

我正在做一个 Spring 项目,现在我必须编写 JPA 方法来搜索在 Set

中有 phone 个 LIKE 的用户

该方法应该在我实现JpaRepository

的接口UserRepository中

我试过这样写方法:
List<User> findByNameLikeOrPhoneNumbersLike(String name, Set<String> phoneNumbers);
List<User> findByNameLikeOrPhoneNumbersLike(String name, String phoneNumber);
List<User> findByNameLikeOrPhoneNumbersContaining(String name, String phoneNumber);

但其中 none 个有效。

我的 class 用户实体是:

@Entity
public class User  {
@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

 @Convert(converter = PhoneNumbersConverter.class)
    public Set<String> phoneNumbers = new TreeSet<>();

........
}

目前我的 PhoneNumbersConverter 将列表转换为用“,”连接的字符串

我想编写可以在给定字符串上搜索我的用户的方法,该字符串可能是 LIKE 名称,也可能是 LIKE 用户编号之一。

如果您可以使用 nativeQuery @Query,您可以这样做(假设列名是 namephone_numbers 并且 phone_numbers 看起来像这样 111222333,222333444,333444555).

@Query(value = 
  "SELECT _user FROM user _user " +
  "WHERE " +
    "_user.name LIKE CONCAT('%', , '%') OR " +
    "_user.phone_numbers LIKE CONCAT('%', , '%')",
nativeQuery = true
)
List<User> findWhereNameOrPhoneNumberLike(String query);

您可能还想对 query_user.name 使用 UPPER 函数成为 case-insensitive (UPPER(_user.name) LIKE UPPER(CONCAT('%', , '%')))。