JAVA 框架hibernate (三)(数据库更新丢失)

一、场景:

我们在并发操作数据库同一个字段,比如:name:tom  age:22这条数据。有2个同时进行操作。A操作该数据的name改成admin,B操作这条数据的age改成:35。然后A先把数据更新(name:admin age:22)到数据库。

然后B将他修改的数据(name:tom,age:35)更新数据库,这个时候数据库这条数据为:name:tom age:35 。而A的更新数据丢失。

这个就是数据更新丢失。

二、解决方法:

给表加一个乐观锁:

      给javabean添加一个version属性。我们在并发更新数据的时候,hibernate会将用户更新的数据进行version对比,如果version不一致的话,用户更新失败,抛出异常。

三:

操作步骤:

1)给javvabean添加version属性:

属性名字可以随意不一定是version。

1 private Integer up;
2     public Integer getUp() {
3         return up;
4     }
5 
6     public void setUp(Integer up) {
7         this.up = up;
8     }

 映射文件添加version标签:(需要注意的是:version的位置,在property的前面。)

1 <version name="up"/>

这样更新数据操作的时候,会在数据库中多一个up属性(版本从0开始计算):

1 select  *from customer;
2 +----+------+--------------+------+---------+----+
3 | id | name | ipone_number | fav  | version | up |
4 +----+------+--------------+------+---------+----+
5 |  4 | ooop | 120          | NULL |    NULL |  0 |
6 +----+------+--------------+------+---------+----+
7 1 row in set (0.00 sec)
1   <version name="up"/>
原文地址:https://www.cnblogs.com/evilliu/p/8758338.html