Прослушивания в спящем режиме, генерирующие один и тот же идентификатор версии для нескольких вставок в одну таблицу
Я использую прослушивание 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"/>