@AuditJoinTable не работает при аудите отношений «многие ко многим» с использованием спящего режима envers

#java #spring #hibernate #jpa #hibernate-envers

#java #spring #спящий режим #jpa #hibernate-envers

Вопрос:

Я использую Spring Boot 1.3.2 и Spring Data JPA 1.9.4 с базой данных MS Sql server2014 для процесса для процесса сопоставления отношений «многие ко многим».

У меня есть две таблицы с сущностями Book amp; Publisher. там, где они имеют отношения «многие ко многим», поставляются с таблицей BookPublisher и объектом BookPublisher.

Я использовал hibernate envers 4.3.3 final для аудита каждого объекта. Таблицы Book_AUD и Publisher_AUD и BookPublisher_AUD создаются автоматически путем размещения аннотации @Audited для каждого объекта.

Book_AUD и Publisher_AUD работают должным образом для аудита вставки, обновления и удаления.

Запись сохраняется в таблице объединения при сохранении записи в таблице Book с набором записей publisher. Но аудит происходит только при вставке таблицы BookPublisher_AUD, а не при обновлении удаления.

Я использовал аннотацию @AuditJoinTable для аудита таблицы сопоставления отношений, как показано ниже.

     @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "BookPublisher", joinColumns = @JoinColumn(name = "BookId", referencedColumnName = "BookId"), inverseJoinColumns = @JoinColumn(name = "PublisherId ", referencedColumnName = "PublisherId"))
    @WhereJoinTable(clause = "isActive = 1 ")
    @AuditJoinTable
    private Set<Publisher> publishers;
 

Есть ли какой-либо способ провести аудит таблицы реляционных сопоставлений в hibernate envers или какая-либо ошибка в использовании аннотации @AuditJoinTable?

Комментарии:

1. Во-первых, @AuditJoinTable следует использовать только в том случае, если вы хотите присвоить таблице соединений определенное имя, в противном случае оно ничего не делает, envers уже знает, что делать с a @JoinTable . Я не совсем понимаю, как вы определяете сбой аудита, можете ли вы опубликовать примеры данных в своих таблицах? ваши конфигурации гибернации? какие-либо свойства envers по умолчанию изменены?

2. Я очень новичок в hibernate envers, поэтому я просто добавил аннотацию @Audited в объект Book и publisher для аудита, но не в объект BookPublisher. Я удалил аннотацию AuditJoinTable в элементе сопоставления коллекций в сущности Book, но бесполезно. Я добавил только три свойства в свой файл свойств приложения, как показано ниже spring.jpa.hibernate.ddl-auto=обновить spring.jpa.properties.org.hibernate.envers.audit_table_suffix=Аудит Тем не менее, я не выполняю аудит, чтобы зафиксировать обновление и удаление записей. Итак, не могли бы вы привести примерный пример кода для доказательства решения.

3. Я внес изменения в код, теперь аудит происходит только при вставке и удалении объекта collection publisher из объекта Book через репозиторий Book. Есть ли какие-либо ограничения в hibernate envers, чтобы не поддерживать прямое взаимодействие с репозиторием BookPublisher?

4. @SatishKonda здравствуйте, я столкнулся с той же проблемой, вы нашли какое-либо решение по этому поводу?