#java #jpa-2.1 #postgresql-13 #java-15
Вопрос:
Я разрабатываю небольшие java-приложения для школьных проектов с помощью PostgreSQL.
Используя драйвер JDBC, я мог бы выбрать поле с помощью ~
оператора, чтобы действовать как CONTAINING
вместо объединения фильтра с помощью LIKE
.
Позвольте мне привести вам пример:
SELECT * FROM USERS WHERE NAME ~ ? ORDER BY NAME
С тех пор как мы начали использовать платформу JPA для облегчения разработки, я заметил, что тот же пример с использованием JPA выдает ошибку при использовании ~
оператора…
Выдана ошибка:
An exception occurred while creating a query in EntityManager:
Exception Description: Syntax error parsing [select u from Users u where u.name ~ ?1 order by u.name].
[30, 41] The expression is not a valid conditional expression.
Все примеры кода, которые я смог найти в Google, сделаны с использованием LIKE
вместо CONTAINING
.
Мой вопрос в том, поддерживает ли JPA оператор containing при работе с PostgreSQL?
Немного информации:
JDK 15
Netbeans 12.3
JPA 2.1
PostgreSQL 13.2
Ответ №1:
Ваша интуиция верна, потому jpa
что не поддерживает ~
оператора, для получения дополнительной информации вы можете проверить ссылку oracle persistence-2_1, содержащую jpa
спецификацию pdf со списком всех доступных jpa
операторов, не включая ~
оператора. Операторы сравнения, доступный только следующие: =, >, >=, <, <=, <> (не равно), [не]между [не]как,[не так], это[не]имеет значение NULL, это[не]пустыми, [не]член[О], [не]существует
Комментарии:
1. Действительно жаль, содержит намного проще в использовании, может выбирать материал с пустыми параметрами и т. Д. Но спасибо за ответ!
2. @NickolasDeluca Добро пожаловать, к сожалению, у вас есть только две альтернативы : использовать один собственный запрос, в котором отсутствуют преимущества jpql, или переписать исходный запрос только с помощью этих операторов, если это возможно.
3. Не нужно подчеркивать это, полностью можно переписать, чтобы использовать КАК, это только менее желательно.
4. @NickolasDeluca Полностью согласен с вами.