#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);
.
.
.
}