Hibernate的级联删除

项目中用的是JPA配合Hibernate,做一个需求的时候需要用到级联删除,网上找了下,发现JPA不支持级联删除,需要用的Hibernate自己的CascadeType,配置一般如下

@OneToMany(cascade={CascadeType.ALL},mappedBy = "workCalendar", orphanRemoval = true)
private List<WorkCalendarDayDTO> days;

主要是配置了orphanRemoval = true,等于与原来的

@OneToMany(cascade={CascadeType.ALL},mappedBy = "workCalendar")
@Cascade({ org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private List<WorkCalendarDayDTO> days;

这样就能级联删除了,但是,需要注意的是:

hibernate3进行级联删除就是要用session.delete,session.executeUpdate不行。
session.delete运行机制:根据主表检查是否存在关联子表,如果存在,则把子表内外键置为空,使之脱离级联关系,再进行主表的删除,用delete你可以检查下,子表里面的外键被设定为null啦。
session.executeUpdate运行机制:直接执行主表的删除。

就是因为这个害我困扰了半天,怎么我配对了还是不能级联删除,原来是框架代码的删除方法调用的是executeUpdate,而不是delete。

posted @ 2012-09-29 11:31  樱木不坏  阅读(344)  评论(0)    收藏  举报