这两个方法是应对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是一样的。