Как использовать как массив строк HIBERNATE - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь передать массив строк в качестве параметра в свой запрос, но получаю следующую ошибку

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

Вот мой запрос

select * from table where value  like any (array[?1]);

, когда я запускаю его в режиме гибернации, запрос выглядит так:

 select * from table where value  like any (array[('%foo%', '%bar%', '%baz%')]);

Есть лучший способ передать мой массивкак параметр ??Я думаю, что важно сказать, что мой массив динамический, поэтому я не могу указать его в своем запросе.

Ответы [ 3 ]

0 голосов
/ 19 марта 2019
  • Сначала используйте createNativeQuery вместо createQuery, поскольку синтаксис является родным для PSQL.
  • Второй синтаксис запроса должен быть select * from table where value like any (array?1) как?1 будет заменен ['%foo%', '%bar%', '%baz%'], поэтому ваш конечный запрос будет соответствовать требуемому синтаксису PSQL.select * from table where value like any (array['%foo%', '%bar%', '%baz%'])
0 голосов
/ 27 марта 2019

Во-первых, ваш синтаксис неправильный.

Вместо:

select * from table where value  like any (array[?1]);

Вы должны использовать:

select * from table where value like any (:vals);

Вы не можете использовать array[?] или array[:var] построить переменную.Это недопустимый синтаксис.

Во-вторых, для Hibernate 5.2 до 5.4 вы можете просто добавить эту зависимость и напрямую использовать наиболее распространенные массивы объектов.Примитивные массивы не поддерживаются и не должны быть.

0 голосов
/ 19 марта 2019

использовать метод setParameterList.

String queryStr = "select * from table where value in :valueList";

Query query = SessionFactory.getCurrentSession().createQuery(queryStr);


query.setParameterList("valueList", new Object[]{"%foo%","%bar%","%baz%"});

Обратите внимание, что я использовал в предложении, и он не поддерживает символы подстановки, такие как%.

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