Hibernate - из трех столбцов, по крайней мере один должен быть не-null

У меня есть сущность, которая имеет три внешних ключа для других объектов:

public class MyClass {
 // ...
 @OneToOne(cascade = CascadeType.ALL, optional = false)
 @JoinColumn(name = "customer_id")
 public Customer getCustomer() {
 return customer;
 }
 @OneToOne(cascade = CascadeType.ALL, optional = true)
 @JoinColumn(name = "creditDossier_id")
 public CreditDossier getCreditDossier() {
 return creditDossier;
 }
 @OneToOne(cascade = CascadeType.ALL, optional = true)
 @JoinColumn(name = "insuranceDossier_id")
 public InsuranceDossier getInsuranceDossier() {
 return insuranceDossier;
 }
 // ...
}

Как я могу добавить ограничение, гарантирующее, что хотя бы одно из * Досье не является нулевым.

1 ответ

Вы должны написать метод с аннотацией @PrePersist в классе сущности, который будет проверять ваши ограничения до их сохранения.

@PrePersist
 public void checkValidation(){
 if(isValid()){
 // send for persist.
 }
 else{
 //throws Exception. 
 } 
 }
 private boolean isValid(){
 return customer!=null || creditDossier!=null || insuranceDossier!=null;
 }

licensed under cc by-sa 3.0 with attribution.