0

我在持久化到 Oracle DBMS 的 Web 应用程序中使用 JPA 的 Hibernate 实现。如果我有一个插入一些使用 Spring 声明性事务注释 (@Transaction) 的数据的服务方法,那么何时将更改提交给 DBMS?如果我有数千个线程使用此服务方法插入数据并且服务器崩溃(类似于 OutOfMemory 异常),已插入但未提交的事务会发生什么?它与 JDBC 有什么不同?

4

1 回答 1

1

通常提交发生在 EntityManager 关闭之前(@Transaction如果调用者未修饰,则在修饰方法的末尾)。如果使用休眠/JPA,您可以通过将以下记录器设置为 DEBUG 来调试事务开始/提交/回滚:

org.hibernate.transaction=DEBUG 
org.hibernate.engine.transaction=DEBUG # Hibernate 4.2.2 or higher

通常,当发生运行时异常时,您的事务将被回滚,但这取决于您的配置/设置。

于 2013-07-08T04:04:32.677 回答