问题描述
在many-to-many的双向关联中,两端<set>里的cascade和inverse改如何配置呢,是否两边的cascade都能设置为all?看到有个帖子说只能一端的inverse设置为false,另一端一定要为true,可设置为true的一端怎么去维护中间表呢?
解决方案
解决方案二:
该回复于2011-01-24 09:09:05被版主删除
解决方案三:
如果是两个表共同维护,就用两个inverse=false
解决方案四:
只设置一个就行了,只用一方维护
解决方案五:
引用2楼hf2905330的回复:
如果是两个表共同维护,就用两个inverse=false
可以试试希望对你有帮助
解决方案六:
引用楼主gqzyyxh的回复:
在many-to-many的双向关联中,两端<set>里的cascade和inverse改如何配置呢,是否两边的cascade都能设置为all?看到有个帖子说只能一端的inverse设置为false,另一端一定要为true,可设置为true的一端怎么去维护中间表呢?
关于cascade,都设为all可以的。实际上任何搭配都可以的。关于inverse,不能两边都设为true,其他搭配均可。inverse设为true的一端只能依靠另一端来维护中间表,但这种维护和程序怎么写并没有关系,只是Hibernate运作的内部动作不同而已。
解决方案七:
刚试了下,cascade两边都设置为all时,我删除一边的一条数据数据,结果两边互相级联,删了很多的有用数据。PersonJob中间表person_job1;黎明;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的黎明,结果如下了:PersonJobperson_job4;李白;4;诗人;6;4;4;5;鲁迅;5;作家;7;5;5;8;5;4;很纠结,不是要这效果啊,改如何设置呢?至于inverse是否两边都设置,我看到一位大神说:“为什么在多对多中不能由双方都来维护关系了:因为这样会导致重复更新中间表的可能,报出重复值的错误。”谁能解释一下么,自己还不知道该如何去测试,先谢谢各位大神了
解决方案八:
...什么效果啊,刚还排版好的,大神么费心看下吧,哪些3个数字在一起的是中间表,最前面的数字式id了....
解决方案九:
双向关联中cascade=“all”时,删除一方的数据会把另一方的也删除掉即cascade中有“delete级联”,出现比如我删了Person表中id=1的黎明,把job中与之级联的“舞者”和“商人”也删除了,设置成“save-update”可以避免。请问下,有什么好方法可以删除id=1的黎明时,删除perso_job中与“黎明”有关的关系值,不删除job中的值,当job中的值为孤儿节点时再删除它,这时候“save-update”就没这效果了?
解决方案十:
该回复于2011-01-24 13:47:29被版主删除
解决方案十一:
up,怎么没人解决了呢
解决方案十二:
该回复于2011-01-26 10:36:23被版主删除
解决方案十三:
顶下,期待回答
解决方案十四:
给你个建议:尽量少使用ORM的关联、级联功能,特别是多对多的关联!
解决方案十五:
分开把many-to-many拆开成2个one-to-many来做吧。。方便一些。但是牺牲了些性能。考虑,考虑而已=。=
解决方案:
引用13楼bao110908的回复:
给你个建议:尽量少使用ORM的关联、级联功能,特别是多对多的关联!
为什么要少用ORM的关联、级联功能