Hibernate级联删除的问题

比如有三张表:商品,小类,大类。 其中商品中持有小类作为外键,小类中持有大类作为外键。这个做级联删除就挺麻烦, 由于你要是删大类,隶属于其下的小类和商品都得删掉,你要是删小类,其下的商品也都得删掉。 这就引出了级联。在hibernate中可以使用cascade属性来指定,还有就是设置one-mang与mang-one,这个大家都知道,我也不细说。
说说关键问题,我们都知道,在Set端设置inverse="true" cascade="all"这两个属性可以对Set内部的对象进行级联,还是上面的例子,如果你要是删大类由于级联关系,你完全可以正常删除它旗下的子类和所有商品,前提是你配置正确。如果你要是直接删其中的某一个小类的话,就出问题了“deleted object would be re-saved by cascade”, 会报这个错误,在百度,google搜会搜到很多。。有的感觉都有点莫名奇妙,说说我的方法,这个问题的本质就是你的小类不是孤立存在的,因为它对某个大类存在关系。直接删它当然不行,你必须先解除这种关系再删~ 直接上示例:
Stype st = (Stype)this.getHibernateTemplate().get(Stype.class, id);
st.getBtype().getStypes().remove(st);
this.getHibernateTemplate().delete(st);

解释一下,首先通过小类的id号取得你要删的这个小类的引用,然后取得它所属的大类再取得这个大类下的所有小类的集合最后移除它,然后在做我们熟悉的delete就OK了。

你可能感兴趣的:(Hibernate,百度,Google)