как использовать like any с массивом строк JPA

#java #postgresql #hibernate #jpa #sql-like

#java #postgresql #переход в спящий режим #jpa #sql-подобный

Вопрос:

Я пытаюсь проконсультироваться с использованием HIBERNATE и JPA.

это собственный запрос, и он работает на postgres

 select * from table tb where upper(tb.column1) like any(array[?1]);
  

но когда я запускаю с использованием jpa, я получаю следующую ошибку

[42883] ОШИБКА: оператор не существует: текст ~ ~ запись Dica: Ни один оператор не соответствует заданному имени и типу (ам) аргумента. Возможно, вам потребуется добавить явные приведения типов.

Я вижу, что это потому, что hibernate запускает запрос следующим образом:

 select * from table tb where upper(tb.column1) like any(array[('%text1%', '%texte2%')]);
  

и это должно быть без ‘()’ вот так:

 select * from table tb where upper(tb.column1) like any(array['%text1%', '%texte2%']);
  

Вот как я работаю на JPA

 @Query(nativeQuery = true, value = "SELECT column1 FROM table1 WHERE column1 LIKE ANY(ARRAY[?1])")
List<String> example(List<String> valores);
  

Как я могу это решить….

Комментарии:

1. Оператору ANY должен предшествовать один из следующих операторов сравнения =, <=, >, <, > и <> Это причина, по которой это не работает

Ответ №1:

Вы можете попробовать что-то вроде этого:

select * from (select unnest([array]) as colum_text from [table]) as temporal where temporal.colum_text like '%[value to search]%'