如何删除从其他对象引用的对象?

时间:2013-10-16 14:40:51

标签: java database hibernate java-ee jpa

如何删除从其他对象引用的对象?例如:

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 个答案:

答案 0 :(得分: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 Documentation的更多信息。