本帖最后由 cainiao223 于 2010-11-11 14:52:00 编辑

解决方案 »

  1.   

    inverse=ture 意思是关系被维护方,写在one的一方是不是有点不合适?
    cascade=all 没有问题,一般都是one的一方是老大
      

  2.   

    inverse=ture 一般都是写在one的一方的好不好
    我发现问题是出在 lazy=false 上
    由于lazy=false 导致 在one的一方cascade=all前提下
    many一方不能删除自己 把cascade=all 改成delete 可以解决
    把lazy=false 改成lazy=ture 也可以解决 
    但是我想知道为什么many一方删除自己 怎么会有级联操作?还引发了deleted object would be re-saved by cascade我观察了代码 报错的时候 先查询了改日志 又查询了该日志对应的宠物 再查询了宠物的的所有日志
    一共三条语句之后报错
    而把cascade=all 改成delete  之后依然是这3条语句 之后执行的操作
    谁能帮我理下思路
    1、lazy=ture 为什么不报错
    2、lazy=false  且 cascade=all 为什么报错
    3、lazy=false 且cascade=delete 为什么不报错 
      

  3.   

    我不知道你为什么觉得inverse=true是在one的一方,但是我告诉你为什么。
    inverse是关系被维护的意思,即一方在删除的时候,也会同时删除inverse=true的一方。
    打个比方,你删除了宠物的某个日志,但是one的一方inverse=true,所以one的一方也会删除,但是one的一方还关联着别的many,由于外键约束的关系,无法删除,报错!!明白了吗?
    当你many的一方只有1个元素的时候,我估计就不会报错了。
      

  4.   

    当你在删除操作的时候,cascade=all 还是delete 是一样的,没什么区别,不要误导自己
      

  5.   

    1、lazy=ture 为什么不报错
    2、lazy=false 且 cascade=all 为什么报错
    3、lazy=false 且cascade=delete 为什么不报错  (宠物可以有很多宠物日志 宠物是one的一方 日志是many的一方 现在问题就是cascade=all情况下 mang一方不能删除自己。为什么?)
    我觉得应该是lazy和cascade 的问题,你知道吗,如果你吧lazy设为false的话,它就会把所有的信息都会查找出来,不管你有没有用到的信息,而你又把cascade设为all,代表任何的增删改查都可以,当你这样去执行删除语句的话,它就会先删除many的一方,然后再去删除one 的一 方,这样就会引发异常了,因为你的one的一方还有许多的many对应着它。我想应该是后者的可能性大些。楼主自己再多做几遍罗。
      

  6.   

    分都给你了 但是inverse=true确实应该在one的一方
    一百个员工记住一个老板容易还是一个老板记住100个员工容易呢
    明显由员工记住老板比较科学(每个人记住一个人就好了)
    在 one(老板)的一方 inverse=true 反转开启 将维护权交给了多的一方(员工)
    我是这么理解的
      

  7.   

    inverse=true实际上是去解放了one那一方,在这儿就是指上面的 老板 对象,他不需要在每次更新的时候,都把 员工 都加载出来