Hibernate Batch Cascade删除集合

时间:2010-12-28 15:09:05

标签: java oracle hibernate collections cascade

不幸的是,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错误。

1 个答案:

答案 0 :(得分:2)