hibernate一对多时,如何通过主对象,删除子对象?用集合的方式。
比如有二个表和对象,作者和文章
author,article
在author中有个集合article是set,对应了作者发表的文章。
当我在hibernate中使用author.getArticles().removeAll()或author.getArticles().clear();
然后通过session去save了author时,发现作者对应的子表中的记录也就是作者发表的文章并没有被删除掉。
请问如果想删除作者相关的文章,如何通过操作集合的方式来删除呢?谢谢

解决方案 »

  1.   

    在主表xml.hbm中响应字段设置 cascad="all" 支持联级删除
      

  2.   

    配置下就可以了
    @OneToMany(targetEntity = ****.class, mappedBy = "****", cascade = {
    CascadeType.MERGE, CascadeType.REMOVE },fetch=FetchType.LAZY)
      

  3.   

    我是直接用的cascade = CascadeType.ALL,这样不行呢。
      

  4.   

    试过了,cascade = {
    CascadeType.MERGE, CascadeType.REMOVE }也不行。
      

  5.   

    设置fetch=FetchType.EAGER而不是二楼说的fetch=FetchType.LAZY
      

  6.   


    这和FetchType有什么关系?
      

  7.   

    先控制反转 inverse="true";再级联 cascade = "all"
      

  8.   

    这个容易,cascade="all,delete-orphan"就可以了。
      

  9.   

    看来我遇到的问题和楼主一样。配置了one-to-many。inverse="true" cascade="all-delete-orphan"  lazy="false"我的现象是,如果 author对象是从数据库中通过hibernate 的Query查询上来的(这个时候getArticles() 实际类是org.hibernate.collection.PersistentSet),那么author.getArticles().removeAll()后 seesion.save 能够清除对应子表记录。如果这个author是内存中自己创建的(数据库中存在对应主键的记录),author.getArticles().removeAll()后 seesion.save ,子表记录依旧存在,我看了hibernate的输出日志,只执行了select,没有执行delete。这个事情我也很迷茫,不知道楼主是否找到解决方案了。
      

  10.   

    非要hibernate帮你删吗  你都知道关系 自己程序控制就行了 加好事务 
    级联设置 配置和纠错都麻烦