OptimisticLockException при попытке удалить версионную сущность без записей аудита - PullRequest
0 голосов
/ 02 января 2019

Я использую Eclipse HistoryPolicy для создания истории.Когда я пытаюсь удалить объект, у которого нет записей в таблице аудита (объект, вставленный простым SQL-запросом), я вижу SQL-запрос в журнале:

UPDATE FOO_AUDIT SET AUDIT_END = ?, DEL_USER_NAME = ? WHERE ((AUDIT_END IS NULL) AND (FOO_ID = ?))

Но FOO_AUDIT не дозируетсодержит записи для сущности FOO с этим идентификатором, поэтому я получил:

org.eclipse.persistence.exceptions.OptimisticLockException
Exception Description: One or more objects cannot be updated because it has changed or been deleted since it was last read.

Отлично работает с weblogic 10.3.5 и eclipselink-2.4.1.Может ли кто-нибудь помочь с некоторыми отзывами по этому поводу?

версия eclipselink - 2.7.3, WildFly версия 12.0.0;

После некоторой отладки я обнаружил, что это вызвано пакетным исправлением в ParameterizedSQLBatchWritingMechanism.class

  try {
            int rowCount = (Integer)this.databaseAccessor.basicExecuteCall(this.previousCall, null, session, false);
            if (this.previousCall.hasOptimisticLock()) {
                if (rowCount != 1) {
                    throw OptimisticLockException.batchStatementExecutionFailure();
                }
            }
        } finally {
            clear();
        }

Оператор Update обновляет 0 строк, и предыдущийCall имеет оптимистическую блокировку из дескриптора класса FOO.

...