在使用hibernate时,我们是否每次都必须使用事务?

时间:2014-11-11 07:48:16

标签: java hibernate transactions

我读过许多网站,他们说使用事务是可选的,因为hibernate应用程序在自己的应用程序代码中管理事务。

但是当我检查代码时,它总是使用事务吗?

什么是正确的方法?

    Configuration c = new Configuration();
    c.configure("hibernate.cfg.xml");
    SessionFactory sf = c.buildSessionFactory();

    Session s = sf.openSession();

    Transaction t = s.beginTransaction();
    //some code
    t.commit();

2 个答案:

答案 0 :(得分:3)

以下是official documentation所说的内容:

  

数据库或系统,事务边界始终是必需的。在数据库事务之外不会发生与数据库的通信(这似乎使许多习惯于自动提交模式的开发人员感到困惑)。始终使用明确的事务边界,即使对于只读操作也是如此。根据您的隔离级别和数据库功能,这可能不是必需的,但如果您始终明确划分事务,则没有任何缺点。当然,即使是读取数据,单个数据库事务也会比许多小事务执行得更好。

答案 1 :(得分:0)

在hibernate属性文件

中添加以下标记
 <prop key="hibernate.current_session_context_class ">thread</prop>

或者如果您使用的是spring,那么您可以使用@Transactional注释自动处理事务。