当异常发生时调用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行,该实体仍会被删除吗?但是当发生异常时会发生什么?
非常感谢您的投入。谢谢!
答案 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也将使用。当它回滚时,数据库事务也会回滚,包括所做的任何刷新......我想。