Hibernate中的inverse属性和cascade属性

来源:互联网 发布:网络大电影靠什么赚钱 编辑:程序博客网 时间:2024/05/17 06:25

       假设Customer和Orders 建立一对多的双向关联.

 

inverse 属性:

//加载持久化对象

Customer customer = (Customer) session.load(Customer.class, new Integer(2));

Orders order = (Orders) session.load(Orders.class,new Integer(2));

//建立关联

order.setCustomer(customer);

customer.getOrders().add(order);

因为Hiberante 自动清理缓存中的持久化对象,按持久化状态的改变来同步更新数据库.所以尽管上面的代码只修改了

orders表中的一条记录但 还是会执行两条update 语句 ,因为内存中的持久化对象的状态发生了两次改变.

而这种多余的sql语句会影响性能.解决这种问题的办法是 把 inverse属性的值设置为 true .

总结:

影射一对多的双向关联时,因该把 one 方的inverse属性值设置为 true .

建立两个对象的双向关联时应该同时修改关联两端的属性.

 

cascade 属性:

当属性值为

 save-update : (级联保存) 时,表明保存或更新当前对象时会级联保存或更新他所关联的对象.

delete :(级联删除)  级联删除所关联的对象.

all-delete-orphan : 自动删除不再和 父对象关联的子对象.并且 在出现上面两种情况时执行上面两种的功能.

可以说是一个全自动的属性值.

一般情况下,当关联双方存在父子关系.就可以把父方的cascade 属性值设置为all-delete-orphan.

父子关系: 由父方来控制子方的生命周期.子对象必须和一个父对象关联.子对象不可孤立存在.

 

原创粉丝点击