session 的 merge() 方法可将程序对脱管对象所做的修改保存到数据库, 但 merge() 于 update() 方法的最大区别: merge() 方法不会持久化给定的对象, 只返回对象的副本, 该副本处于持久化状态, 使用 mergen() 方法来保存程序对脱管对象所做的修改时, 如果 session 中存在相同持久化标识的持久化对象, merge() 方法里提供的对象状态将覆盖原有的持久化实例.
在 session 中使用 LockOptions 对象锁
News n = Session.get(News.class,pk,LockOptions.UPGRADE);
Sesson.LockRequest 的 lock() 方法也将某个脱管对象重新持久化, 但脱管对象也必须是没有修改过的
- // 简单重新持久化
- session.buildLockRequest(LockOptions.NONE).locki(news);
- // 先检查持久化对象的版本, 然后重新持久化该对象
- session.buildLockRequest(LockOptions.READ).lock(person);
- // 先检查持久化对象的版本, 然后使用 SELECT ... FOR UPDATE 重新持久化该对象
- session.buildLockRequest(new LockOptins(LockMode.PESSMISTIC_WRITE)).lock(teacher);
相关注解的使用
来源: http://www.bubuko.com/infodetail-2935354.html