hibernate丢失更新

Posted 人生不断学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate丢失更新相关的知识,希望对你有一定的参考价值。

如果多个线程操作基于同一个查询结构对表中的记录进行修改,那么后修改的记录将会覆盖前面修改的记录,前面的修改就丢失掉了,这就叫做更新丢失。
Serializable可以防止更新丢失问题的发生。其他的三个隔离级别(Read uncommitted isolation、Read committed isolation、Repeatable read isolation)都有可能发生更新丢失问题。

Serializable虽然可以防止更新丢失,但是效率太低,通常数据库不会用这个隔离级别,所以我们需要其他的机制来防止更新丢失。解决办法:

悲观锁:使用session.get(Customer.class, 1,LockMode.UPGRADE); 方法

乐观锁:在对应的JavaBean中添加一个属性,名称可以是任意的。例如:private Integer version; 提供get和set方法。在映射的配置文件中,提供<version name="version"/>标签即可。



以上是关于hibernate丢失更新的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hibernate 和 Spring 实现乐观锁

Hibernate逍遥游记-第15章处理并发问题-001事务并发问题及隔离机制介绍

Hibernate框架第三天

hibernate 多个事务并发运行时的并发问题

在 merge() 操作中丢失复合外键(JPA/Hibernate)

Hibernate的懒加载session丢失解决方法