java - 如何删除被其他对象引用的对象?

标签 java database hibernate jakarta-ee jpa

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

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/

相关文章:

database - 如何通过 .NET 代码压缩和修复 ACCESS 2007 数据库?

r - 构造一个有条件地取某个值直到满足另一个条件的变量

mysql - 如何确保数据库的互操作性

java - 使用 jdk8 和 groovy 2.4.4- java.lang.InknownClassChangeError 运行 job-dsl-plugin

java - 我可以在端口 443 上安全地运行 Tomcat 而在 8080 上不安全地运行吗

java - 具有 SSL 相互身份验证的 Jersey 客户端

java - @Future 的实现在哪里定义?

Preon 的 Java 或 C++ 等价物?

java - 在新实体上重用 Hibernate 中的特定字段

java Hibernate注释允许在提交表单时使用文本框 'blank'