【问题标题】:How does JPA Handle Commits when Runtime Exceptions Occur发生运行时异常时 JPA 如何处理提交
【发布时间】:2013-07-07 17:53:34
【问题描述】:

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

【问题讨论】:

  • 最终,无论您使用何种 API 访问数据库,Spring 事务都由数据库处理。无论如何,Hibernate 使用 JDBC 来访问数据库。

标签: java hibernate jpa jdbc


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 1970-01-01
    • 2017-08-19
    • 2016-04-27
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多