Hibernate3中的两个新方法的解释?

06-08-07 lyojbuilder
在 Hibernate3中新增加了 session.merge()和 session.persist()两个方法,这个 persist()和 session.save()方法有什么区别呢?文档上说都是保存一个对象。 而这个 merge就更不明白他解释的含义了,是关联对象的意思?哪位用过这个方法的朋友能解释一下?多谢 !
    

banq
2006-08-08 09:50
这两个方法是应对select for update操作,防止脏数据stale data,所谓脏数据是在下面情况发生的:

1. 版主A在一个事务中读取帖子X

2. 版主B在一个事务中读取帖子X

3. 版主A基于读取的帖子进行更新

4. 版主B基于读取的帖子也进行更新。

当第3步成功发生后,版主B场景中帖子就成了脏数据。

在EJB2的CMP中,通过版本控制Version Number和事务隔离层设置来支持。

Hibernate3是补这一节课(这也是我原来说Hibernate2的事务没有EJB2实体Bean强的原因),使用起来一样比较难。通过这两个方法提供重拾之前放弃的对象。

select for update是查询后修改,当修改时,如果你确证当前session肯定不包含之前已经持久的同一个实例,使用update();如果你不想考虑session状态就使用merge()保存你的修改。

事情并没有这么简单,还需要对Hiebrnate事务CAID有一个全面了解,这些步骤和对待实体Bean是一样的。

lyojbuilder
2006-08-09 17:11
多谢回复!

“事情并没有这么简单”

是这样,这个 merge方法可能有其他含义,因为 saveOrUpdate方法就是“不想考虑session状态”这个时候用的,所以这个新的 merge方法一定还有其他用处吧?

猜你喜欢