Прослушивания в спящем режиме, генерирующие один и тот же идентификатор версии для нескольких вставок в одну таблицу

Я использую прослушивание hibernate с версией 3.5 hibernate. хотя он работает нормально, когда я пытаюсь вставить одну запись в одну таблицу за один переход, но проблема заключается в том, что "BATCH" запускается, и он вставляет несколько записей в одну таблицу за один переход, тогда для аудита создается один "идентификатор id" таблицы, которая вызывает нарушение целостности.

Так как это нормальное поведение hibernate, все запросы вставки запускаются в конце транзакции (когда он сбрасывается), но в данный момент запускается только один запрос для генерации "rev id".

 select hibernate_sequence.nextval from dual;

Пожалуйста, скажите мне, это ошибка в аудите или я что-то упустил? заранее спасибо

2 ответа

Revid всегда охватывает модификации в нескольких таблицах!

Да, вставки вызываются в конце транзакции, но: если вы используете оптимистическую изоляцию транзакции, транзакция может прочитать незавершенное состояние других транзакций, которые в данный момент активны, но еще не зафиксированы.

Если вы стали нарушать целостность ограничения столбца rev_id К сожалению, настроен "уникальный". Это неверная схема базы данных! Исправьте схему, удалив уникальность столбца. rev_id!

rev_id-Колонна в global-hibernate-Relationstable должна быть уникальной, потому что это Primary-Key! (global-hibernate-Relationship обычно содержит также метку времени).

Не уверен, что у вас все еще есть эта проблема :). В моем случае у меня была такая же проблема, и решением было установить составной первичный ключ таблицы аудита в столбцах «rev» и «id». Ниже приведен пример сценария Liquibase:

      <addPrimaryKey
    columnNames="id, rev"
    constraintName="t_order_aud_pk"
    tableName="t_order_aud"/>
Другие вопросы по тегам