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的关联
本文介绍了Hibernate中如何正确配置一对多双向关联关系以提高应用程序性能,并详细解释了inverse属性的作用及使用方法。此外还强调了在建立双向关联时双方属性同步更新的重要性。
987

被折叠的 条评论
为什么被折叠?



