了解Hibernate事务



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

在此页面中:

13.2数据库事务划分

数据库或系统事务边界总是必要的。不与数据库的通信可以发生在数据库之外事务(这似乎让许多习惯于自动提交模式)。始终使用清晰的事务边界,即使对于只读操作

这一条规定,在任何情况下都应该使用事务,即使是只读操作

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

关于以下引用的段落(本页)。

交易(org.hibernate.Transaction)

(可选)应用程序用于指定的单线程、短期对象原子工作单位。它从底层JDBC、JTA或CORBA事务。一个组织.自由.会话可能跨越几个org.hibernate.在某些情况下是交易。但是,交易使用底层API或org.hibernate.Transaction,从来都不是可选的。

第一个单词(Optional)表示什么意思?

这句话的意思是什么?

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

此外,我从这个页面了解到,无论何时打开Hibernate会话,无论是更新还是加载对象,我都必须启动事务。

加载操作不需要启动事务。只有当您的操作可能进行更新,并且您想要提交/回滚语义以防该范围内的其他操作失败时,才需要它。因此hibernate事务只是一个作用域,在需要时(例如第一次获得连接时)将使用数据库的底层事务。如果它在事务中,那么该连接将在事务范围的整个生命周期内使用,而不是返回到每个sql操作的池中,这是在没有hibernate事务的情况下发生的情况。

最新更新