Java后端之路(七)Hiberbate解决数据更新丢失问题

2019-04-03  本文已影响0人  itfitness

目录

前言

最近在学习Hibernate框架,然后这里有一个教程网站里面有关于ssh框架的教程,想学的朋友可以看一下(ps:不是广告)http://www.yiidian.com/hibernate/hibernate-transaction-manage.html

问题描述


如果有两个用户A和B同时操作数据库中的同一条数据(People { pid = 1, name = 隔壁老王 ,age = 18 ,sex = 男 ,phone = 110}),其中A用户修改name为“刘能”,B用户修改name为“赵四”,A用户先修改完然后B用户修改完,此时数据的最终保存结果为B用户修改的结果,而A用户的修改结果会被丢失。

解决方法

1.在实体类中增加version属性

public class People {
    private Integer pid;
    private String name;
    private String sex;
    private Integer age;
    private String phone;
    //增加version属性
    private Integer version;
    
    public Integer getVersion() {
        return version;
    }
    public void setVersion(Integer version) {
        this.version = version;
    }
    
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Integer getPid() {
        return pid;
    }
    public void setPid(Integer pid) {
        this.pid = pid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    
}

2.在映射文件中增加version标签

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.itfitness.domain">
    <class name="People" table="people">
        <id name="pid" column="pid">
            <generator class="native"></generator>
        </id>
        <!--增加version标签 name属性与实体类中的属性名相对应-->
        <version name="version"/>
        <property name="name" column="name"></property>
        <property name="age" column="age"></property>
        <property name="sex" column="sex"></property>
        <property name="phone" column="phone"></property>
    </class>
</hibernate-mapping>

3.在Debug模式下利用Junit模拟操作

上一篇 下一篇

猜你喜欢

热点阅读