了解Hibernate事务

时间:2013-11-23 12:27:54

标签: hibernate transactions

据我所知,如果出现任何问题(如代码异常或数据库已关闭),事务有助于回滚更新操作。我不明白的是:

this page中:

  

13.2。数据库事务划分

     

数据库或系统,事务边界始终是必需的。没有   与数据库的通信可以在数据库之外进行   交易(这似乎混淆了许多习惯于开发人员的开发人员   自动提交模式)。始终使用明确的事务边界,即使是   只读操作

这个说明在所有情况下都应该使用交易,即使是只读操作

  • 为什么必须这样?我不应该只在我即将更新数据库时这样做吗?
  • 如果是必须的,为什么在获得会话时不会自动启动?

关于以下引用的段落(On this page)。

  

交易(org.hibernate.Transaction)

     

(可选)应用程序用于指定的单线程,短期对象   原子工作单位。它从底层的JDBC,JTA或者抽象应用程序   CORBA交易。 org.hibernate.Session可能跨越几个   org.hibernate.Transactions在某些情况下。但是,交易   划分,使用底层API或   org.hibernate.Transaction永远不是可选的。

第一个单词(Optional)的含义是什么?

这句话的含义是什么?

However, transaction demarcation, either using the underlying API or org.hibernate.Transaction, is never optional.?!

我也从this page了解到,每当我打开Hibernate会话时,无论是更新还是加载对象,我都必须启动一个事务。

1 个答案:

答案 0 :(得分:1)

您无需为加载操作启动事务。如果您的操作可能会执行更新,并且您希望提交/回滚语义以防该范围内的其他内容失败,则只需要它。因此,hibernate事务只是一个范围,并将在需要时使用数据库的底层事务,例如第一次获取连接时。如果它在一个事务中,那么该连接将用于事务范围的生命周期,而不是为每个sql操作返回到池,这是没有hibernate事务的情况。

相关问题