首先明确一点,inverse(控制反转)属性设置的意义只存在一对多,多对多这些含有集合的对应关系中(双向关联)!就拿Dept,Emp例子来说吧!
dept对象中有Emp对象的引用(Set<Emp> emps),Emp对象中有dept对象的引用(也就是双向关联)!按照数据建表的三大范式,为了减少冗余数据,emp表中必定有一列是指向dept的(dept_id),而dept表中则没有emp的数据。那么问题来了,hibernate管理这些表的时候,碰到dept_id这列的时候该怎么维护呢?是按照dept来维护还是emp来维护呢?所以就出现了inverse这一属性。在dept.hbm.xml文件中配置emps属性时
<set name="emps" inverse="false">
<span style="white-space:pre"> </span><!-- 对象关系联系的列 --!>
<span style="white-space:pre"> </span><key column="dept_id"></key>
<one-to-many class="....Emp />
</set>
inverse属性如果不设置,默认为false,即不控制反转,意思就是仍然由本对象,也就是one的一端(Dept)来控制关联关系,即Dept发生改变时,才会修改数据库中相关联的值(dept_id)。如果改为true,则控制反转,由many端(Emp)控制关联关系。