Inverse:可选,意为“反转”,用于表示双向关联中的被动一端。在关联关系中,inverse=“false”的一方为主控方,负责维护关联关系,它的默认值是“false”。
例:member与order是一对多关系。
Member.hbm.xml的配置文件中
<set name=“orders” order-by=“order_id” cascade=“all” lazy=“true”inverse=“true”>
<key column=“member_id”/>
<one-to-many class=“Order”/>
</set>
1.Inverse=“true”表示Member不再作为关系的主控方,而由Order做主控方负责维护关系。这样在Order对象持久化时,它会主动去获取相关的Memember的id,作为自己的member_id.(在一对多关系中一般将多的一方设置为false,即关系的主控方,这将有助于改善性能)。
2.Cascade:如上对Member的cascade设置为all,表明对member对象的任何操作都会对与member对象相关联的order进行同样的操作。
3.新增一个Order对象时
l 如果设one端(member)为主控方(inverse=false),则代码如下:
Order order=new Order();
member.getOrders().add(order);//会加载与此member相关联的所有Order集合,会占用大量内存,影响性能。
session.save(member);
l 如果设置many端(order)为主控方
Order order=new Order();
order.setMember(member);
session.save(order);
无需加载与member相关联的多有Order对象。