写道
假设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.
父子关系: 由父方来控制子方的生命周期.子对象必须和一个父对象关联.子对象不可孤立存在
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caoyinghui1986/archive/2008/04/14/2291085.aspx
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.
父子关系: 由父方来控制子方的生命周期.子对象必须和一个父对象关联.子对象不可孤立存在
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caoyinghui1986/archive/2008/04/14/2291085.aspx