当调用delete func时是否隐式回滚hibernate还是需要显式调用它?

时间:2016-09-29 08:53:07

标签: hibernate

当异常发生时调用delete函数(然后刷新)后,hibernate会隐式回滚吗?我有以下代码

line 1: try {
line 2:  session.beginTransaction();
line 3:  session.delete(entity);
line 4:  session.flush(); //Is there a need for this if i'm going to commit
                          //the transaction anyway?
                          //Is rollback implicitly called when exception occurs?
                          //Do i still need line 5 to be able to rollback?

line 5:  session.getTransaction.commit(); //What happens when this line and line 7
                                          //do not exist and exception was thrown?  
line 6: } catch (Throwable t) {
line 7:  session.getTransaction.rollback();
line 8: }

如果您没有第2,5和7行,该实体仍会被删除吗?但是当发生异常时会发生什么?

非常感谢您的投入。谢谢!

1 个答案:

答案 0 :(得分:0)

你看过文件了吗? https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/transactions.html

  

11.2.1。非管理环境
  ...
  您不必显式刷新()会话:对commit()的调用会根据会话的FlushMode自动触发同步。对close()的调用标志着会话的结束。 close()的主要含义是会话将放弃JDBC连接。此Java代码是可移植的,可在非托管和JTA环境中运行。   ...
  11.2.2。使用JTA
  ...
  如果使用bean管理的事务(BMT),如果使用Transaction API,Hibernate将告诉应用程序服务器启动和结束BMT事务。 事务管理代码与非托管环境相同。

我强调要回答代码中的问题。

至于事务:hibernate将使用现有事务,即当事务提交时,hibernate也将使用。当它回滚时,数据库事务也会回滚,包括所做的任何刷新......我想。