Когда для человека добавляется новый адрес, должна быть создана новая ревизия. Редакция создана, но остальные поля сущности в редакции помечены как нулевые.
Разное и правильное:
Когда я изменяю имя человека, создается ревизия, в которую вводятся все поля.
Персона:
@Entity
@Table(name = "Person")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Audited
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "HIBERNATE_SEQUENCE", allocationSize = 1)
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@OneToMany(mappedBy="person")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Address> addresses = new HashSet<>();
Лицо, проводящее аудит:
@Entity
@Table(name = "person_aud")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class PersonAud implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private AuditIdentity auditIdentity;
@Column(name = "revtype")
private Short revtype;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToOne
@MapsId("auditIdentity.id")
@JoinColumn(name = "id", nullable = false)
private Person person;
@OneToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Address> addresses = new HashSet<>();
Адрес объекта:
@Entity
@Table(name = "address")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Audited
public class Address implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "HIBERNATE_SEQUENCE", allocationSize = 1)
private Long id;
@Column(name = "street")
private String street;
@Column(name = "house_number")
private String houseNumber;
@Column(name = "zip_code")
private String zipCode;
@Column(name = "city")
private String city;
@Column(name = "state_province")
private String stateProvince;
@Column(name = "country")
private String country;
@ManyToOne
@JsonIgnoreProperties("addresses")
private Person person;
@OneToOne
@JsonIgnoreProperties("addresses")
@NotAudited
private PersonAud personAud;
Если я добавлю новый адрес, принадлежащий лицу XY, моя таблица будет выглядеть следующим образом:
PERSON_AUD:
ID: 1
REV: 1001
РЕВТИП: 1
FIRST_NAME: NULL
LAST_NAME: NULL
Например, если я изменяю имя, вводятся поля для имени и фамилии.