Что должен делать envers @AuditMappedBy()?

Я использую Hibernate-Envers 4.3.11 Final.

Я вижу, что в документации сказано:

To properly audit such relations with Envers, you can use the @AuditMappedBy annotation. It enables you to specify the reverse property (using the mappedBy element). In case of indexed collections, the index column must also be mapped in the referenced entity (using @Column( insertable=false, updatable=false ), and specified using positionMappedBy. This annotation will affect only the way Envers works. Please note that the annotation is experimental and may change in the future.

Что означает документация, когда написано "указать обратное свойство"?

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

Поэтому я думаю, что мне нужно использовать @AuditMappedBy().

Но я запутался, потому что независимо от того, использую ли я @AuditMappedBy(MappedBy = "NAME") в столбцах, которые являются коллекциями, или @audited в верхней части моих сущностей, я вижу те же результаты в таблицах аудита и в данных, когда я извлекаю свои сущности. Мне еще предстоит понять, почему я буду использовать @AuditMappedBy().

Может ли кто-нибудь помочь мне понять вариант использования @AuditMappedBy()?

Пример иерархии таблиц и того, как мне нужно перейти к коллекциям в дочерних таблицах:

**TABLE A:**

@Entity()
@Audited
@Table(name = "TABLE_A")

@Column(name = "ID")
private Long id;
@Column(name = "NAME", length = 50)
private String name;

@OneToMany(
            mappedBy = "table_a",
            cascade = {CascadeType.MERGE, CascadeType.PERSIST}
    )
    @org.hibernate.annotations.Cascade(
            {org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN}
    )
    private Collection<TABLE_B> table_b = new ArrayList<TABLE_B>();




**TABLE B:**


@Entity()
@Audited
@Table(name = "TABLE_B")

@Column(name = "ID")
private Long id;
@Column(name = "NAME", length = 50)
private String name;

@XmlTransient
@ManyToOne()
@JoinColumn(name = "ID_TABLE_B", nullable = false)
private TABLE_A table_a;

@ManyToOne(
        cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@org.hibernate.annotations.Cascade(
        {org.hibernate.annotations.CascadeType.SAVE_UPDATE}
)
@JoinColumn(name = "ID_TABLE_C")
private TABLE_C table_c;

@ManyToOne(
        cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@org.hibernate.annotations.Cascade(
        {org.hibernate.annotations.CascadeType.SAVE_UPDATE}
)
@JoinColumn(name = "ID_TABLE_D", nullable = true)
private TABLE_D table_d;



**TABLE C:**

@Entity()
@Audited
@Table(name = "TABLE_C")

@Column(name = "ID")
private Long id;
@Column(name = "NAME", length = 50)
private String name;


@OneToMany(
        mappedBy = "table_c",
        cascade = {
                CascadeType.REMOVE})
@org.hibernate.annotations.Cascade(
        {org.hibernate.annotations.CascadeType.SAVE_UPDATE,
                org.hibernate.annotations.CascadeType.MERGE,
                org.hibernate.annotations.CascadeType.DELETE_ORPHAN}
)
@XmlTransient
private Collection<TABLE_B> table_b = new HashSet<TABLE_B>();



**TABLE D:**

@Entity()
@Audited
@Table(name = "TABLE_D")

@Column(name = "ID")
private Long id;
@Column(name = "NAME", length = 50)
private String name;

@XmlTransient
@OneToMany(
        mappedBy = "table_d",
        cascade = {CascadeType.MERGE, CascadeType.PERSIST}
)
private Collection<TABLE_B> table_b = new ArrayList<TABLE_B>();

Можете ли вы обновить свой пост, чтобы указать версию Envers и пример сопоставления сущностей, где обход не работает для вас? AuditMappedBy не всегда необходим, и это немного зависит от ваших вариантов использования.

Naros 20.02.2019 18:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
613
0

Другие вопросы по теме

Похожие вопросы

Бесконечный цикл со многими ко многим в котлине с подтаблицей
Hibernate PropertyAccessException: произошло исключение IllegalArgumentException при вызове геттера? Что случилось?
JPA Query с использованием собственного запроса возвращает null вместо списка сущностей
Подзапрос внутреннего соединения Hibernate HQL
Hibernate Query возвращает повторяющийся набор результатов при использовании H2 и HSQL DB
Я создал базовый графический интерфейс CRUD с помощью Hibernate, но получаю «исключение индекса вне пределов». В чем может быть проблема?
Транзакция JTA неожиданно откатывается для больших данных
Как создать экземпляр 2 разных объектов только с одним HTTP-запросом (файл JSON)
Hibernate TypedQuery дает сбой после обновления до версии 5, если он заканчивается на )
Исключение Hibernate «PropertyValueException: ненулевое свойство ссылается на > нулевое или переходное значение». Я застрял и не знаю, что делать