如何删除被其他对象引用的对象?示例:
Person person = new Person();
Payment payment = new Payment();
payment.setReceiverOfPayment(person);
dao.delete(person);
类(class):
class Person {
}
class Payment {
//optional
@OneToOne
private Person receiverOfPayment;
}
现在,如果我删除对象 person,则会出现异常:
org.hsqldb.HsqlException: integrity constraint violation: foreign key no action;
FK_PAYMENT_RECEIVEROFPAYMENT_ID table: PAYMENT
这当然是因为某些付款可能仍然涉及个人。
在删除某人并手动清除引用之前,是否必须迭代数据库中的所有付款?或者是否有任何级联(或类似)选项可以自动处理此问题?
最佳答案
将付款字段添加到您的 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 Documentation .
关于java - 如何删除被其他对象引用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19406421/