Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在持久化到 Oracle DBMS 的 Web 应用程序中使用 JPA 的 Hibernate 实现。如果我有一个插入一些使用 Spring 声明性事务注释 (@Transaction) 的数据的服务方法,那么何时将更改提交给 DBMS?如果我有数千个线程使用此服务方法插入数据并且服务器崩溃(类似于 OutOfMemory 异常),已插入但未提交的事务会发生什么?它与 JDBC 有什么不同?
通常提交发生在 EntityManager 关闭之前(@Transaction如果调用者未修饰,则在修饰方法的末尾)。如果使用休眠/JPA,您可以通过将以下记录器设置为 DEBUG 来调试事务开始/提交/回滚:
@Transaction
org.hibernate.transaction=DEBUG org.hibernate.engine.transaction=DEBUG # Hibernate 4.2.2 or higher
通常,当发生运行时异常时,您的事务将被回滚,但这取决于您的配置/设置。