Как удалить объект, на который ссылаются другие объекты?

Как удалить объект, на который ссылаются другие объекты? Пример:

Person person = new Person();
Payment payment = new Payment();
payment.setReceiverOfPayment(person);

dao.delete(person);

Классы:

class Person {

}

class Payment {
 //optional
 @OneToOne
 private Person receiverOfPayment;
}

Теперь, если я удаляю объект объекта, я получаю исключение:

org.hsqldb.HsqlException: integrity constraint violation: foreign key no action; 
FK_PAYMENT_RECEIVEROFPAYMENT_ID table: PAYMENT

Это, конечно, связано с тем, что некоторые платежи могут по-прежнему иметь ссылку на человека.

Должен ли я перебирать все мои платежи в БД до того, как я удалю человека и очистку ссылок вручную? Или есть каскадная (или аналогичная) опция, которая может обрабатывать это автоматически?

1 ответ

Добавьте поле платежа в свой объект Person. Для использования Cascade вам необходимо двунаправленное отношение.

Что-то вроде этого:

@Entity
public class Payment {
 @OneToOne(cascade = CascadeType.ALL)
 @JoinColumn(name="myColumn")
 private Person receiverOfPayment;
}

@Entity
public class Person {
 @OneToOne(mappedBy="receiverOfPayment")
 private Payment payment;
}

В зависимости от того, что вы хотите, ManyToOne может быть более актуальным. Дополнительная информация в документации Hibernate.

licensed under cc by-sa 3.0 with attribution.