Что должен делать envers @AuditMappedBy ()? - PullRequest
0 голосов
/ 19 февраля 2019

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

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

Для правильной проверки таких отношений с Envers вы можете использовать аннотацию @AuditMappedBy,Это позволяет вам указать обратное свойство (используя элемент mappedBy).В случае индексированных коллекций столбец индекса также должен отображаться в ссылочной сущности (с использованием @Column (inserttable = false, updatable = false) и указываться с помощью positionMappedBy. Эта аннотация будет влиять только на работу Envers. Обратите внимание, чтоаннотация является экспериментальной и может измениться в будущем.

Что означают документы, когда в нем указано «указать обратное свойство» ?

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

Так что я думаю, что мне нужно использовать @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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...