hibernate方法比较

来源:互联网 发布:软件项目管理规范 编辑:程序博客网 时间:2024/05/29 07:41

当需要使用update来保存程序对持久化对象所作的修改时,如果不清楚该对象是否曾经持久化过,那么程序可以选择使用 saveOrUpdate()的方法,该方法自动判断该对象是否曾经持久化过,如果曾经持久化过,就使用update(),否则就save().

Code
1 User u = session1.load(User.class,new Integer(pk));
2 //第一个session session1关闭
3 session1.close();
4 u.setName="sasa";
5
6 //打开第二个Session
7 Session session2 =  ..
8 //保存托管对象所作的修改
9 session2.update(u);

     当我们用另一个Session来保存这种修改后,该托管对象将再次回到Session的管理之下,也就在此回到持久化状态。

 

     merge()方法也可以将程序对托管对象所作的修改保存到数据库里,但是merge()与update()方法最大的区别就是:merge()方法不会持久化给定对象。举例来说:当我们执行session.update(u)后,u对象将会变成持久化状态,而执行session.merge(u),u对象依然不是持久化状态,u对象依然不会被关联到Session上。

     当程序使用merge()方法来保存程序对托管对象所作的修改时,如果session中存在相同持久化标识的持久化对象时,merge()方法里提供对象的状态将覆盖原有持久化实例的状态。如果Session中没有相应的持久化实例,则尝试从数据库中加载,或创建新的持久化实例,最后返回该持久化实例。

     提示:merge()用法代替了Hibernate早期版本的saveOrUpdateConpy

首先, merge作用大致相当于saveorupdate这个方法, 即有唯一性标识, 则运行save, 没有则运行update

    下面来比较2者的区别, update(object), 方法运行后, object是持久化状态, 而Object obj = merge(object), 方法运行后, object是脱管状态, obj是持久化状态

    最后比较2者的性能, 本人使用for循环测试10000次, merge: 150ms, update: 50ms, 显然update性能占优势.

    所以, merge的用法应该是在需要返回被保存的对象时使用.


最后娱乐一下 一部很好看的儿童动漫: 蛋计划 欢乐动漫

0 0
原创粉丝点击