ORA-00920 - Исключение Sql при выполнении запроса Javers в ORACLE PL / SQL - PullRequest
0 голосов
/ 23 января 2019

Исключение выдается каждый раз, когда я пытаюсь выполнить Javers-запрос Javers.Например:

Запрос:

JqlQuery query = QueryBuilder.anyDomainObject (). Build ();
Изменения javers_changes = javers.findChanges (запрос);

Броски

org.javers.common.exception.JaversException: SQL_EXCEPTION: ORA-00920: недопустимый реляционный оператор при выполнении sql: SELECT a. *, Rownum FROM (состояние SELECT, тип, версия, change_properties, managed_type, commit_pk, автор, commit_date, commit_date_instant, commit_id, g.local_id, g.fragment, g.owner_id_fk, o.local_id owner_local_id, o.fragmentowner_fragment, o.type_name owner_type_name ОТ jv_snapshot INNER JOIN jv_commit ON commit_pk = commit_fk INNER JOIN jv_global_id г ВКЛ g.global_id_pk = global_id_fk LEFT OUTER JOIN jv_global_id О на o.global_id_pk = g.owner_id_fk где 1 = 1 и (ложь) ORDER BY DESC snapshot_pk) ГДЕ РОУНУМ <=?в org.javers.repository.sql.session.PreparedStatementExecutor.wrapExceptionAndCall (PreparedStatementExecutor.java:128) ~ [javers-persistence-sql-5.1.2.jar! /: na] в org.javers.repository.sql.session.PreparedStatementExecutor.runSql (PreparedStatementExecutor.java:100) ~ [javers-persistence-sql-5.1.2.jar! /: Na] at ... </p>

Конфигурация базы данных, прочитанная и показаннаяприложение при запуске:

2019-01-22 19: 07: 54.125 INFO 13270 --- [main] ojsbsql.JaversSqlAutoConfiguration: обнаружен спящий диалект: Oracle10gDialect
2019-01-22 19:07: 54.133 INFO 13270 --- [main] ojrepository.sql.SqlRepositoryBuilder: запуск SqlRepository ...
2019-01-22 19: 07: 54.133 INFO 13270 --- [main] ojrepository.sql.SqlRepositoryBuilder: диалект: ORACLE
2019-01-22 19: 07: 54.133 INFO 13270 --- [main] ojrepository.sql.SqlRepositoryBuilder: schemaManagementEnabled: false
2019-01-22 19: 07: 54.134 INFO 13270 ---[main] ojrepository.sql.SqlRepositoryBuilder: schemaName: null

Моя база данных ORACLE и принимает команды Oracle / PLSQL.Ошибка не возникает, когда Javers фиксирует данные, однако команды JQL, кажется, всегда терпят неудачу.Анализируя создание sql, я обнаружил, что проблемы заключаются в следующем:

SELECT a. *, Rownum FROM (состояние SELECT, тип, версия, updated_properties, managed_type, commit_pk, автор, commit_date, commit_date_instant, commit_id, g.local_id, g.fragment, g.owner_id_fk, o.local_id owner_local_id, o.fragment owner_fragment, o.type_name owner_type_name_name FROM jv_snapshot ВНУТРЕННЕЕ СОЕДИНЕНИЕo ON o.global_id_pk = g.owner_id_fk WHERE 1 = 1 и (false) ORDER BY snapshot_pk DESC) WHERE rownum <=? </p>

  • PL / SQL не принимает 'false'как это появляется на WHERE;
  • Символ '?'не принято;

Этот диалект не принят или я что-то не так делаю?

Ответы [ 2 ]

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

Эта ошибка исправлена ​​в Javers 5.2.6, см. https://github.com/javers/javers/issues/796

0 голосов
/ 25 января 2019

ОК, значит, вставленный вами код не является PL / SQL или SQL.Это код JDBC PreparedStatement, который выглядит как SQL, но содержит ? заполнителей.Так что не беспокойтесь о ?, с ними все в порядке.

Настоящая проблема может быть вызвана этим хитрым предикатом WHERE 1 = 1 and ( false), который генерируется JaVers и который, вероятно, не является допустимым SQL на диалекте Oracle.

Пожалуйста, сообщите об этом здесь https://github.com/javers/javers/issues мы исправим это.

...