2 u013179958 u013179958 于 2016.03.28 22:26 提问

在HIbernate多对多的关系中,由某端维护关系是什么意思?

维护关系主要体现在哪里?

     <!-- 注意这里没有设置 inverse,表示由  Course 来维护关联关系-->
    <set name="students" cascade="save-update" table="sc_table">
             <key column="cou_id" not-null="true"></key>
             <many-to-many class="Student" column="stu_id" ></many-to-many>  
    </set> 

1个回答

zdw1138453189
zdw1138453189   2016.03.28 23:00
已采纳

inverse属性默认是false的,就是说关系的两端都来维护关系。这个意思就是说,如有一个Student, Teacher和TeacherStudent表,Student和Teacher是多对多对多关系,这个关系由TeacherStudent这个表来表现。那么什么时候插入或删除TeacherStudent表中的记录来维护关系呢?在用hibernate时,我们不会显示的对TeacherStudent表做操作。对TeacherStudent的操作是hibernate帮我们做的。hibernate就是看hbm文件中指定的是"谁"维护关系,那个在插入或删除"谁"时,就会处发对关系表的操作。前提是"谁"这个对象已经知道这个关系了,就是说关系另一头的对象已经set或是add到"谁"这个对象里来了。前面说过inverse默认是false,就是关系的两端都维护关系,对其中任一个操作都会处发对表系表的操作。当在关系的一头,如Student中的bag或set中用了inverse="true"时,那就代表关系是由另一关维护的(Teacher)。就是说当这插入Student时,不会操作TeacherStudent表,即使Student已经知道了关系。只有当Teacher插入或删除时才会处发对关系表的操作。所以,当关系的两头都用inverse="true"是不对的,就会导致任何操作都不处发对关系表的操作。当两端都是inverse="false"或是default值是,在代码对关系显示的维护也是不对的,会导致在关系表中插入两次关系。

u013179958
u013179958 求栗子
一年多之前 回复
u013179958
u013179958 你说的插入两次关系是什么意思?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!