![](/img/trans.png)
[英]SOAPHandler: How to remove automatically added namespace/attribute from child element
[英]How to automatically remove child entities?
我想从我的表中删除实体并让它自动删除任何属于它的子实体。
例:
class User {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", orphanRemoval=true)
@OnDelete(action = OnDeleteAction.CASCADE)
List<Address> addresses;
}
当我删除没有地址的用户时,一切正常。 删除地址而不删除用户的工作。
但是:如果我尝试删除仍有一些地址的用户,我会得到org.hsqldb.HsqlException
:
integrity constraint violation: foreign key no action; FK_ADDRESS_USER_ID table: ADDRESS
这可能有什么问题? 或者这是不支持的,我必须在删除用户之前先显式删除所有包含的Address
对象?
我相信你有一个外键约束的问题。 使用像Aqua Data Studio或类似工具这样的数据库工具(您也可以在IDE中,在Eclipse - Data Source Explorer视图中执行此操作),以显示ADDRESS表的创建脚本。 它应该包含这样的东西:
ALTER TABLE TESTSCHEMA.ADDRESS
ADD CONSTRAINT FK1ED033D4E91AAFD9
FOREIGN KEY(FK_ADDRESS_USER_ID)
REFERENCES TESTSCHEMA.USER(ID)
ON DELETE CASCADE
在您的案例中,点是ON DELETE CASCADE
部分。 如果缺少或不同,那可能是造成问题的原因。 如果表是由Hibernate自动生成的,则此约束应该有效,但请记住,数据库之间存在差异。 可能是在添加Hibernate的@OnDelete注释之前生成了表,所以现在您将获得“外键无操作”完整性约束违规。
与此问题无关,但请注意,当从User实体中的集合中删除地址时, orphanRemoval=true
将尝试从数据库中删除该地址。
另外,请查看此内容 ,了解有关Hibernate对数据库ON DELETE CASCADE约束的支持的详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.