Запрос гибернации, приводящий к отсутствию выражения в Oracle - PullRequest
0 голосов
/ 04 июня 2019

Мы используем Hibernate в качестве ORM для сопоставления наших сущностей с базой данных.

Все наши запросы к базе данных / транзакции происходят через сущность. Запросы к базе данных (выбор / вставка / обновление / удаление) создаются hibernate.

В одном сценарии мы добавили ограничение критерия (IN), чтобы включить список значений, как показано ниже.

c.add(Restrictions.in(column_name,list));

Для определенных бизнес-случаев / сценариев список может быть пустым. Приведенные выше критерии приведут к гибернации для создания запроса как

select * from table where column_name in ();

Это приводит к ошибке, как показано ниже в Oracle

Caused by: org.hibernate.exception.SQLGrammarException: ORA-00936: missing expression
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82) ~[hibernate-core-4.1.2.Final.jar:4.1.2.Final]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) ~[hibernate-core-4.1.2.Final.jar:4.1.2.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) ~[hibernate-core-4.1.2.Final.jar:4.1.2.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) ~[hibernate-core-4.1.2.Final.jar:4.1.2.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) ~[hibernate-core-4.1.2.Final.jar:4.1.2.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) ~[hibernate-core-4.1.2.Final.jar:4.1.2.Final]
at com.sun.proxy.$Proxy1751.executeQuery(Unknown Source) ~[na:na]

В нашей среде разработки мы используем H2, и он поддерживает пустое предложение IN. Мы используем базу данных oracle в нашей среде QA и видим описанную выше ошибку в QA.

Хотя это явно сообщение об ошибке оракула, я пытаюсь понять, есть ли какой-либо атрибут / свойство гибернации, которые можно установить для обработки / управления этим сценарием с помощью гибернации при генерации SQL.

Стек: hibernate-core-4.1.2, hibernate-entitymanager-4.1.2, hibernate-jpa-2.0-api-1.0.1.Final.jar

...