Hibernate 中 元素的inverse 属性分析

试验背景:

表:

Customer.java

Order.java

Customer.hbm.xml

Order.hbm.xml

级联保存与Customer对象相关的Order对象:

如果Customer.hbm.xml中set元素的属性inverse为true,则控制台输出的信息为:

如果Customer.hbm.xml中set元素的属性inverse为false(默认是false),则控制台输出的信息为:

发现这时,多执行了一条update语句。Why?

inverse=false分析:

当修改了Customer 对象的属性:

customer.getOrders().addOrder(order)

Hibernate 一旦知道持久态对象customer的上面的属性发生变化,执行相应的SQL语句:

update
HIBERNATE.ORDER_7
set
CUSTOMER_ID=?
where
ID=?

但如果将inverse=true,则customer与order之间的关系的控制被反转了,

Hibernate 监测到Customer对象上的属性发生变化,并不会去更新与该Customer对象相关的order记录。因为控制被反转了,

one 的一方(Customer)你变你的,我(Order)不会因为你的变化而被Hibernate控制,因为控制反转了,控制权不在你Customer一方,哈哈。我(many 一方)独立了!!

这样一来,我们在应用程序开发过程中为了提高性能,最好是在“one"方把<set>元素的inverse属性设置为true.

你可能感兴趣的:(Hibernate)