如何编写 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
,您可以这样做(假设列名是 name
、phone_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('%', , '%'))
)。
我正在做一个 Spring 项目,现在我必须编写 JPA 方法来搜索在 Set
中有 phone 个 LIKE 的用户该方法应该在我实现JpaRepository
我试过这样写方法:
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
,您可以这样做(假设列名是 name
、phone_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('%', , '%'))
)。