日期:2014-05-19  浏览次数:20659 次

使用hibernate的getCurrentSession()执行查询语句时,为什么一定要开启事务? 谢谢!
我们知道在“增删改查”操作里,只有查询是不需要开启事务的,但是使用hibernate的getCurrentSession()执行查询语句时却一定要开启事务,否则就报错,请问这是为什么呢?

Java code

    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Teacher t = (Teacher)session.get(Teacher.class, 1);
    session.getTransaction().commit();



我测试发现,如果使用OpenSession()是不需要开启事务的
Java code

    Session session = HibernateUtil.getSessionFactory().openSession();
    Teacher t2 = (Teacher)session.get(Teacher.class, 1);
    session.close();



使用OpenSession()执行查询不需要开启事务,这点跟事务的本质符合。
但使用getCurrentSession()执行查询却要开启事务,请高手帮我解答,谢谢!


------解决方案--------------------
探讨
主要是线程安全