zoukankan      html  css  js  c++  java
  • 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"/>
  • 相关阅读:
    http响应状态码大全
    Oracle中start with...connect by子句的用法
    sql的连接查询
    spring框架等web程序在tomcat下的启动顺序
    rest模式get,post,put,delete简单讲解
    context-param和init-param的区别
    spring的webutils包。适用于访问httpservletrequest和httpservletresponse
    java日志的相关配置文件知识
    jquery开发插件提供的几种方法
    Node.js实现网络编程
  • 原文地址:https://www.cnblogs.com/evilliu/p/8758338.html
Copyright © 2011-2022 走看看