Персона является проверяемой организацией и уже помечена @Audited.
Одним из свойств является набор адресов, и этот набор аннотируется @OneToMany.
Сам адрес не подлежит аудиту.
Если мне когда-либо придется изменить набор адресов, добавив новый адрес (а не сам объект адреса), я должен провести аудит в другой таблице с именем person_aud_addresses.
Таблица person_aud_addresses должна содержать добавленный address_id и ревизию лица из person_aud.
@Entity
@Table(name = "person")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Audited
public class Person implements Serializable {
.....
@OneToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) //its not working because Address should not be auditable
private Set<Address> addresses = new HashSet<>();
.....
}
@Entity
@Table(name = "person_aud")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class PersonAud implements Serializable {
....
@OneToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Address> addresses = new HashSet<>();
....
}
@Entity
@Table(name = "address")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Address implements Serializable {
....
@ManyToOne
@JsonIgnoreProperties("addresses")
private Person person;
....
}