1.在映射一对多的双向关联关系时,应该在”多“方把inverse属性设置为true,这样可以提高应用的性能
如Customer:Order为1:N双向关联,将Customer的Set的inverse设置为true,表示Customer与Order之间的关联关系由Order端来维护,如customer.getOrders().add(o)不会更新Customer与Order之间的关联关系,而order.setCustomer(o)才会更新Customer与Order之间的关联关系。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="domain.Customer" table="customers" catalog="blogday"> <id name="id"> <column name="id" /> <generator class="native"></generator> </id> <property name="name"> <column name="name" length="20" /> </property> <set name="orders" lazy="true" inverse="true" cascade="all"> <key column="customer_id" /> <one-to-many class="domain.Order" /> </set> </class> </hibernate-mapping>
2.在建立两个对象的双向关联时,应该同时修改关联两端对象的相应属性
//customer.getOrders().add(order1); //建立customer到order的关联
order.setCustomer(customer);//建立order到customer的关联
虽然没建立customer到order的关联,但是hibernate还是会按照order状态变化同步更新数据库
customer.getOrders().add(order1); //建立customer到order的关联
//order.setCustomer(customer);//建立order到customer的关联
如果没建立order到customer的关联,hibernate不会按照customer状态变化同步更新数据库
为了保证程序的健壮性则应该如下设置:
customer.getOrders().add(order1);//建立customer到order的关联
order.setCustomer(customer);//建立order到customer的关联