1
Customers 类中加如set类型的 Orders属性,Orders类中加入Customer类型的customer属性。
2
测试时,建立两者一对多的双向关联关系。
Customers customer=new Customer(“Tom”,new HashSet());
Order order=new Order();
建立Customer对象和Orders对象的双向关联关系。
order.setCustomer(customer);
customer.getOrders().add(order);
只要将 Set的cascade属性设置为save-update,就可以直接保存customer,与之关联的order对象就会自动被持久化。
Session.save(customer);
3 set的inverse属性。
当建立了对象的双向关联关系时,Hibernate会根据:
order.setCustomer(customer);
customer.getOrders().add(order);
对数据库做两侧更新,其实这里是重复执行了SQL语句,势必会影响到程序的反应速度和性能。
只要将设置set inverse=”true”,
<
set
name
=
"orderses"
inverse
=
"true"
cascade
=
"save-update"
>
<
key
>
<
column
name
=
"CUSTOMER_ID"
not-null
=
"true"
/>
</
key
>
<
one-to-many
class
=
"mypack.Orders"
/>
</
set
>
这段代码表示:在
Customer
和
Order
的双向关联关系时中,
Customer
的关联只是
Order
关联的镜像
.
当
Hibernate
测到持久化对象
Customer
和
Order
对象的状态都发生变化时,仅仅按照
Order
对象的状态变化同步更新数据库。
小结:
1
在映射一对多的双向关联关系时,应该在
one
方把
inverse
属性设成
true
,这样可以提高应用的性能。
2
在建立两个对象的双向关联时,应该同时修改关联两端的对象的相应属性:
order.setCustomer(customer);
customer.getOrders().add(order);
这样才会使程序更加健壮,提高业务逻辑的独立性。
Cascade
的
delete
属性:如果希望在删除
Customer
对象时同时删除与之关联的
Order
对象。
Cascade
的
all-delete-orphan
属性:
1
保存或更新
Customer
对象时,级联保存更新所有关联的
Order
对象。相当于:
save-update
2
当删除
Customer
对象时,级联删除所有关联的
Order
对象。相当于:
delete
3
删除不在和
Customer
对象关联的多有
Order
对象
总结:
One To Many
双相关联
Java
类中:
One
加入
Set
类型的
Many
属性,
Many
加入
One
类型的属性。
业务程序中:为了使程序更加健壮,建立
One
到
Many
,和
Many
到
one
的双向关联。
影射文件中:将
One
中的
set
的
inverse
属性设成
true
(默认是
false
),这样
Hibernate
不会因为我们在业务逻辑中做的双向关联而产生重复的更新数据库的操作,也提高了效率。
适当选择
cascade
的值:
save-update ,delete , all-delete-orphan