不幸的是,Oracle(至少我正在使用的版本)不支持自动级联删除。在删除父记录之前必须单独删除子记录以避免违反约束?
当删除在@OneToMany上设置CascadeType.DELETE的父对象时,Hibernate何时决定逐个删除每个子实例并批量删除外键。
例如,
父母表:
PARENT_ID
1
2
儿童表:
CHILD_ID PARENT_ID
1 1
2 1
3 2
删除父级可以通过两种方式级联删除子级:
delete from CHILD where child_id = 1
delete from CHILD where child_id = 2
delete from PARENT where parent_id = 1
或
delete from CHILD where parent_id = 1
delete from PARENT where parent_id = 1
我见过Hibernate做这两种。我不明白的是Hibernate如何决定使用哪种策略。看起来如果集合实际上已初始化,则可能在前一个示例中进行单独删除。但是,如果集合与会话中的内容不匹配,则很容易出现ConstraintViolationException错误。
答案 0 :(得分:2)