建议去看看夏昕的《hibernate开发指南》
里面有关于inverse和cascade的探讨

解决方案 »

  1.   

    你在bag标签中设置了inverse=true,也就是关联关系让child去维护,你在保存parent的时候,如果是这样操作的话,parent.getChilids().add(child),然后你保存parent的时候是child是插不进去的,因为关联关系让child维护的话,只能这样操作,
    Object parent = new Object(); child.setParent(parent); session.save(child);
    也就是说只要你设置了inverse=true的话,就只能让child去保存它自己了,如果inverse=false的话,是可以通过第一种方式来操作的,
    不过那样会多很多update语句..
      

  2.   

    http://blog.chinaunix.net/u2/77127/showart_1270265.html
      

  3.   

     inverse="true" 的问题, inverse是指出谁代表主控方;
     他在容器,也就是楼主用bag,或者set,list等,其实默认是 inverse="false"的;
     而在一对多的,多的那张表的<one-to-many>中他默认是 inverse="true"(这个用提示是能够查到的)
     如果你两张表默认都是inverse="true",也就是说都是主控方,绝对会出现楼主这样的问题; 因此只有将 bag的inverse="true" 删除就OK了;
     <bag name="EM_Methods" table="EM_Method" lazy="false" cascade="all"> 最好将一的一方默认inverse="false",这样会提升效率;
     好比,一是校长,多是学生,校长不必知道每个学生,但每个学生都应该知道校长;
     因此多的一方作为主控制会效率更高一些
     
      

  4.   

    抱歉,,抱歉....说反了...inverse= "false "是主控方..时间太久了,记混了...
    不过意思还是一样