Как написать метод JpaRepository для поиска пользователей, чей номер телефона хранится в Set <String> - PullRequest
0 голосов
/ 09 мая 2019

Я работаю над проектом Spring, и теперь мне нужно написать метод JPA для поиска пользователей с номером телефона LIKE в наборе

Метод должен быть в моем интерфейсе UserRepository, который реализует JpaRepository

Я попытался написать такой метод:List<User> findByNameLikeOrPhoneNumbersLike(String name, Set<String> phoneNumbers);List<User> findByNameLikeOrPhoneNumbersLike(String name, String phoneNumber);List<User> findByNameLikeOrPhoneNumbersContaining(String name, String phoneNumber);

Но ни один из них не работает.

Мой класс для объекта User:

@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 один из номеров пользователя.

1 Ответ

1 голос
/ 09 мая 2019

Если вы в порядке с nativeQuery @Query, вы можете сделать это так (при условии, что имена столбцов name, phone_numbers и что phone_numbers выглядит так 111222333,222333444,333444555).

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

Вы также можете использовать функцию UPPER, чтобы query и _user.name не учитывали регистр (UPPER(_user.name) LIKE UPPER(CONCAT('%', $1, '%'))).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...