【问题标题】:Do we have to use transaction every time while using with hibernate?每次使用hibernate时我们都必须使用事务吗?
【发布时间】:2014-11-11 07:48:15
【问题描述】:

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

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

什么是正确的方法?

    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();

【问题讨论】:

    标签: java hibernate transactions


    【解决方案1】:

    official documentation 是这样说的:

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

    【讨论】:

      【解决方案2】:

      在hibernate属性文件中添加如下标签

       <prop key="hibernate.current_session_context_class ">thread</prop>
      

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

      【讨论】:

        猜你喜欢
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 2018-10-09
        • 1970-01-01
        • 2020-09-11
        • 2015-10-07
        • 1970-01-01
        相关资源
        最近更新 更多