Hibernate使用乐观锁来处理脏数据问题。
比如有这样一个制造脏数据的场景:
1、通过session1得到id=1的对象product1
2、在product1原来的价格基础上增加100
3、更新product1之前,通过session2得到id=1的对象product2
4、在product2原来的价格基础上增加100
5、更新product1
6、更新product2
但是最后product的价格只增加了100,而不是200.
二、在不使用乐观锁的情况下代码如下:
package com.demo.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.demo.pojo.Product; public class TestHibernate{ public static void main(String[] args){ SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session session1=sf.openSession(); Session session2=sf.openSession(); session1.beginTransaction(); session2.beginTransaction(); Product p1=(Product)session1.get(Product.class,1); System.out.println("原来的基础价格:"+p1.getPrice());//原来基础价格为100 p1.setPrice(p1.getPrice()+100); Product p2=(Product)session2.get(Product.class,1); p2.setPrice(p2.getPrice()+100); session1.update(p1); session2.update(p2); session1.getTransaction().commit(); session2.getTransaction().commit(); Product p=(Product)session1.get(Product.class,1); System.out.println("经过两次价格增加,价格变为:"p.getPrice());//经过两次后才为200 session1.close(); session2.close(); sf.close(); } }