%Like% Запрос в spring JpaRepository для свойства типа List

#java #sql #spring-data-jpa #spring-data #jpql

#java #sql #spring-data-jpa #spring-данные #jpql

Вопрос:

Я хочу написать запрос для поиска записей, содержащих определенную строку в поле, которое определено как список в моей сущности.

и это моя сущность JPA :

 @Entity
public class Bank extends EntityBase<Bank> {
    .
    .
    .

    @Column(name = "sms_numbers")
    @Convert(converter = StringListConverter.class)
    private List<String> smsNumbers;

   .
   .
   .
}
 

SQL будет выглядеть примерно так :

select * from banks where sms_numbers like ' 00400%'

И мой репозиторий был бы примерно таким :

 @Repository
interface BankRepository extends RepositoryBase<Bank> {
    
    @Query("SELECT b FROM Bank b WHERE b.smsNumbers LIKE ' 00400011%'") 
    List<Bank> findReservedSmsNumbers();   
}
 

Но этот код не работает, потому что Bank.smsNumbers — это список, а не строка.

Итак, как я могу это решить?

Ответ №1:

В этом случае вы можете использовать собственный запрос вместо jpql, чтобы ваш репозиторий был :

 interface BankRepository extends RepositoryBase<Bank> {

   @Query(value = "select * from banks b where b.sms_numbers like 
   concat('%',:sNumber,'%') "  , nativeQuery = true)
   List<Bank> findReservedSmsNumbers(String sNumber);
.
.
.
}