在many-to-many的双向关联中,两端<set>里的cascade和inverse改如何配置呢,是否两边的cascade都能设置为all?看到有个帖子说只能一端的inverse设置为false,另一端一定要为true,可设置为true的一端怎么去维护中间表呢?

解决方案 »

  1.   

    如果是两个表共同维护,就用两个inverse=false
      

  2.   

    关于cascade,都设为all可以的。实际上任何搭配都可以的。
    关于inverse,不能两边都设为true,其他搭配均可。inverse设为true的一端只能依靠另一端来维护中间表,但这种维护和程序怎么写并没有关系,只是Hibernate运作的内部动作不同而已。
      

  3.   

    刚试了下,cascade两边都设置为all时,我删除一边的一条数据数据,结果两边互相级联,删了很多的有用数据。
    Person          Job             中间表person_job
    1;黎明; 1;舞者; 1;1;1;
    2;郭富城;        2;商人; 2;1;2;
    3;刘德华; 3;演员; 3;2;2;
    4;李白; 4;诗人; 4;2;3;
    5;鲁迅; 5;作家; 5;3;1;
    6;4;4;
    7;5;5;
    8;5;4;
    比如我删了Person表中id=1的黎明,结果如下了:
    Person          Job             person_job
    4;李白; 4;诗人; 6;4;4;
    5;鲁迅; 5;作家; 7;5;5;
    8;5;4;
    很纠结,不是要这效果啊,改如何设置呢?至于inverse是否两边都设置,我看到一位大神说:“为什么在多对多中不能由双方都来维护关系了:因为这样会导致重复更新中间表的可能,报出重复值的错误。”
    谁能解释一下么,自己还不知道该如何去测试,先谢谢各位大神了
      

  4.   

    双向关联中cascade=“all”时,删除一方的数据会把另一方的也删除掉即cascade中有“delete级联”,出现
    比如我删了Person表中id=1的黎明,把job中与之级联的“舞者”和“商人”也删除了,设置成“save-update”可以避免。
    请问下,有什么好方法可以删除id=1的黎明时,删除perso_job中与“黎明”有关的关系值,不删除job中的值,当job中的值为孤儿节点时再删除它,这时候“save-update”就没这效果了?
      

  5.   

    给你个建议:尽量少使用 ORM 的关联、级联功能,特别是多对多的关联!
      

  6.   

    分开把 many-to-many  拆开成 2个 one-to-many 来做吧。。 方便一些。但是牺牲了些性能。考虑,考虑而已=。=
      

  7.   

    为什么要少用ORM的关联、级联功能