【问题标题】:why to use session.beginTransaction & transaction.commit为什么要使用 session.beginTransaction & transaction.commit
【发布时间】:2012-04-27 15:34:33
【问题描述】:

休眠: 如果将任何瞬态对象添加到休眠会话中,为什么当我关闭会话时不能休眠(在其脏检查之后)。

有没有这样的选择。 此外,如果存在这样的选项,那么为什么我们要开始交易并说它要提交。 (session.beginTransaction())

transaction.commit() 的哪些功能也可以在我们说 session.close() 之后完成,对吗? 请任何人向我解释一下。

【问题讨论】:

    标签: java hibernate session transactions


    【解决方案1】:

    Transaction demarcation 对于正确使用 RDBMS 至关重要,这就是您需要使用 Hibernate 启动和提交事务的原因。

    关于您的问题,您不能在关闭会话时隐式关闭事务,但有一种常见做法是在关闭事务后立即关闭会话。 Hibernate 以contextual sessions 的形式为此模式提供了特殊支持。

    一些框架(Spring、EJB 等)通过消除以编程方式开始和提交事务的需要而走得更远——它们提供了声明性事务方法,允许您以声明方式将方法标记为事务性。也就是说,它们会在您输入此类方法时打开上下文会话(如果需要)并开始事务,并在您从它返回时提交事务并关闭会话(如果需要)。

    【讨论】:

      【解决方案2】:

      session.beginTransaction 用于启动一个事务,该事务可能包含一个或多个粗略的操作,如 INSERT、SELECT、DELETE 等。 而 transaction.commit() 用于提交事务期间发生的所有更改,以便数据库在操作后保持一致状态。

      【讨论】:

        猜你喜欢
        • 2010-12-10
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        • 2012-08-22
        • 2016-09-12
        • 1970-01-01
        • 2020-11-07
        相关资源
        最近更新 更多