У меня есть пример для вас, который создает историю данных для сущности человека. Надеюсь, это поможет.
Мне нужно было сделать вспомогательный интерфейс :
public interface DataHistoryAware {
public DataHistory getDataHistory();
public void setDataHistory(DataHistory dataHistory);
}
Это реализация прослушивателя :
public class DataHistoryListener {
@PrePersist
public void setCreateDataHistory(DataHistoryAware model) {
//set creationDate
DataHistory dataHistory = model.getDataHistory() == null ? new DataHistory() : model.getDataHistory();
dataHistory.setCreationDate(new Date());
model.setDataHistory(dataHistory);
}
@PostUpdate
public void setUpdateDataHistory(DataHistoryAware model) {
DataHistory dataHistory = model.getDataHistory() == null ? new DataHistory() : model.getDataHistory();
dataHistory.setLastModificationDate(new Date());
model.setDataHistory(dataHistory);
}
}
физическое лицо :
@Entity
@EntityListeners(DataHistoryListener.class)
@Table(name="person")
public class Person implements Serializable, DataHistoryAware {
@Column(name = "full_name", length = 255, nullable = false)
private String fullName;
@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "data_history_id", nullable = false)
private DataHistory dataHistory;
public String getFullName() {
return this.fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public DataHistory getDataHistory() {
return dataHistory;
}
public void setDataHistory(DataHistory dataHistory) {
this.dataHistory = dataHistory;
}
}
Эта реализация создает запись истории данных для объекта лица перед сохранением и обновляет ее до слияния. Свойство datahistory имеет ограничение not-null, так что это то же самое, что и ваша проблема со свойством not-null контактного объекта. Надеюсь, это было полезно.