Hibernate Envers не может удалить объект - PullRequest
0 голосов
/ 26 сентября 2019

У меня действительно странная проблема сейчас.

Я просто хочу удалить сущность.

Я также использую Hibernate Envers для аудита.Поэтому теперь я хочу удалить эту сущность.

Теперь я получаю следующее сообщение.

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: столбец 'successed' не может быть нулевым

Поэтому, когда я неожиданно удалил @Audit из своей таблицы, я смог удалить сущность.

Теперь я пошел к своей таблице entity_aud и отменил выбор NOT NULL для атрибута success,Затем я также снова положил @Audit над моим столом.

Теперь это сработало.Так почему, если я хочу просто удалить сущность, я получаю ошибку NOT NULL при использовании Hibernate Envers.

В чем причина этого.

1 Ответ

0 голосов
/ 26 сентября 2019

Когда объект удаляется, Envers также создает запись аудита для этой операции.По умолчанию данные объекта не собираются при создании записи аудита, поэтому по сути Envers пытается вставить строку в таблицу аудита, которая содержит Первичный ключ , Номер редакции и Тип редакции .Все остальные столбцы будут вставлены с нулевыми значениями.

Так как в вашей таблице аудита был указан столбец успеха, заданный как NOT NULL, удаление вызывает исключение.

Помимо первичного ключа, revision,и столбцы типа ревизии в таблице аудита, по этой причине все остальные столбцы должны быть созданы со спецификацией NOT NULL.Если вы можете воспроизвести генерирующие таблицы Envers, которые этого не придерживаются, сообщите об этом как об ошибке, прикрепив модель проблемы к проблеме.

Параметр конфигурации, org.hibernate.envers.store_data_at_delete при значении true сообщитПозволяет захватывать не только первичный ключ объекта, редакцию и тип редакции, но и все проверенные столбцы.Это не включено по умолчанию, потому что, как правило, предыдущая версия поддерживает то же самое состояние, поэтому его копирование действительно не требуется;однако некоторые пользователи предпочитают иметь его.

...