hibernate中openSession方法不能解决事务并发的问题

问题提出:
在service层控制事务需要用到session对象,在dao层进行操作也使用 session对象,所以要保证service中的session与dao中的session是同一对象。
解决方法:
绑定到当前线程
(1)配置文件hibernate.cfg.xml中加入:
thread</pr
operty>
(2)使用getCurrentSession()方法创建session
(3)对比同一个工厂使用openSession生成的两个session是否一致,
对比同一个工厂使用getCurrentSession生成的两个session是否一致
(4)实列:

public class DButils {
    
    
static SessionFactory factory = null;
static Session session=null;
public static void peizhi(){
    
    
Configuration conf= new Configuration().configure();
factory=conf.buildSessionFactory();
}
public static Session getSession() {
    
    
session=factory.openSession();
return session;
}
public static Session getCurSession(){
    
    
session=factory.getCurrentSession();
return session;
}
public static void main(String args[]){
    
    
peizhi();
Session s1= getSession();
Session s2=getSession();
System.out.print(s1==s2);
Session s3=getCurSession();
Session s4=getCurSession();
Session s5=getCurSession();
System.out.print(s3==s4);
System.out.print(s4==s5);
}
}

(5)测试结果
使用openSession生成的session不同
使用getCurrentSession生成的session相同

猜你喜欢

转载自blog.csdn.net/weixin_44703894/article/details/111660252