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模拟操作