Используя Envers, как я могу запрашивать исторические данные и не иметь отсутствующих данных дочерних объектов в запрашиваемой ревизии родительской таблицы? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть несколько таблиц в моей спящей БД.Когда я запрашиваю в моей БД сущность TABLE_A, я получаю доступ к коллекциям в TABLE_C и TABLE_D из-за структуры моих таблиц.Теперь, что касается envers, моя проблема в том, что когда я запрашиваю ревизию TABLE_A, я не вижу данных для коллекций TABLE_C и TABLE_D ... эти сущности равны нулю.Я думаю, что понимаю почему, но я не знаю, как настроить envers для отслеживания данных во всех таблицах, чтобы не получать нулевые объекты при запросе ревизий.Например, мое приложение выполняет транзакцию, которая обновляет данные в TABLE_D, но НЕ TABLE_A, TABLE_B или TABLE_C для этой конкретной транзакции, в результате чего редакция добавляется только в TABLE_D_AUD, но не в TABLE_A_AUD, TABLE_B_AUD или TABLE_C_AUD.

* 1002. *1001* * 1002Мой вопрос заключается в том, что если в TABLE_A_AUD, TABLE_B_AUD или TABLE_C_AUD не было изменено никаких данных и только TABLE_D вызывает увеличение числа оборотов для ревизий TABLE_D, то как мне настроить вещи так, чтобы, когда я получаю ревизии для TABLE_A, я вижу последние изменениядочерняя таблица, TABLE_D?Проблема в том, что номера оборотов сбиваются, потому что TABLE_D изменяется, а остальные нет, но все они связаны.

Также другая сторона подумала: если для каждой таблицы, к которой обращаются во время транзакции гибернации, создается ревизиятогда как получить ревизию без каких-либо пропущенных данных из дочерних таблиц, если эти дочерние таблицы не были затронуты в транзакции?

**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, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...