我有两个类,服务和客户,具有从服务到客户的多对一关联。我想删除客户以及引用它的任何服务。我使用 JPA 作为附加到 PostgreSQL 数据库的 ORM(下面是 Hibernate)。
如果我能够以删除客户会级联到引用它的服务的方式定义关联,那就太好了。但是,也许我误解了一些东西,因为关联是在服务中使用 @ManyToOne 定义的,所以操作将从服务级联到客户,而不是相反?
因此,在没有级联删除的情况下,我开始简单地删除引用客户的所有服务。看起来很简单,除了 JPA/Hibernate 想要批量删除并以错误的顺序执行它们!我的代码基本上查询引用客户的服务,对每个服务调用entityManager.remove(),然后对客户调用entityManager.remove()。但是,当我刷新它时,出现异常,由于外键约束,从客户中删除失败。
我真的需要在从客户删除之前尝试从服务中删除吗?我宁愿不这样做,因为我的事务是由容器管理的,并且提交它会很痛苦。
谢谢, 安迪
最佳答案
手动管理约束关系可能不是一个好主意,特别是考虑到它是一种非常简单且标准的关联类型。
你为什么不定义 one-to-many association在 Customer
中指定级联? (在链接中,您的 Service
类将替换示例中的 Order
。)
关于java - 使用具有外键约束的 JPA 删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596951/