据我所知,如果出现任何问题(如代码异常或数据库已关闭),事务有助于回滚更新操作。我不明白的是:
在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会话时,无论是更新还是加载对象,我都必须启动一个事务。
答案 0 :(得分:1)
您无需为加载操作启动事务。如果您的操作可能会执行更新,并且您希望提交/回滚语义以防该范围内的其他内容失败,则只需要它。因此,hibernate事务只是一个范围,并将在需要时使用数据库的底层事务,例如第一次获取连接时。如果它在一个事务中,那么该连接将用于事务范围的生命周期,而不是为每个sql操作返回到池,这是没有hibernate事务的情况。