Как провести аудит двух таблиц с отношением один-к-одному через спящий режим? - PullRequest
0 голосов
/ 28 января 2019

Итак, у меня есть два класса сущностей: Подписка и MailDetail .Между ними существует взаимно-однозначное отношение.Вот классы -

Subscription.class-

@Data
@Entity
@AllArgsConstructor
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
public class Subscription {

@Id
@GeneratedValue(strategy =`enter code here` GenerationType.SEQUENCE, generator = "subscription_subscription_id_seq")
@SequenceGenerator(initialValue = 1, allocationSize enter code here= 1, name = "subscription_subscription_id_seq", sequenceName = "subscription_subscription_id_seq")
@Column
private Long subscriptionId;

@Column
private String template;

@Column
private String fileFormat;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "mail_id", referencedColumnName = "mail_id")
private MailDetail mailDetail;

}

MailDetail.class -

@Data
@Entity
@Audited
public class MailDetail {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mail_detail_mail_id_seq")
    @SequenceGenerator(initialValue = 1, allocationSize = 1, name = "mail_detail_mail_id_seq", sequenceName = "mail_detail_mail_id_seq")
    @Column
    private Long mailId;

    @Column
    private String emailId;
}

Таким образом, создаются две таблицы аудита, subscription_aud и mail_detail_aud .Создание / обновление в таблице mail_detail осуществляется только через репозиторий подписки.Поэтому мое требование заключается в том, чтобы при каждом изменении полей таблицы mail_details мне требовалась запись аудита в subscription_aud.Или, в принципе, я хочу, чтобы изменение в таблице mail_detail рассматривалось как изменение в таблице подписки.

Я использую hibernate envers для аудита.Как мне этого добиться?

1 Ответ

0 голосов
/ 29 января 2019

К сожалению, не так, как в настоящее время разрабатывается Envers.

Любая ассоциация со многими , в которой либо было изменено ее содержимое, либо изменены элементы в коллекции, будет распространяться на изменение аудита длявладеющая сторона отношений по умолчанию;однако это можно даже отключить, установив org.hibernate.envers.revision_on_collection_change в false .Если этот параметр конфигурации отключен, только коллекции элементов будут передавать изменение владельцу, поскольку элементы в такой коллекции не являются объектами, поэтому могут запрашиваться только через объект-владелец.

Для to-одна ассоциация, это совершенно другая история.

Единственный способ выполнить то, что вы хотите, это ввести какой-то столбец в ваш экземпляр Subscription, которому принадлежит MailDetail, и изменить значениетот столбец, когда этот случай использования происходит.Исходя из того факта, что вы изменяете MailDetail только через объединенный корень Subscription, это должно сработать, однако я согласен, что это не идеально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...