【问题标题】:Why does jdbc use auto-commit true and jpa uses auto-commit false?为什么jdbc使用auto-commit true而jpa使用auto-commit false?
【发布时间】:2021-01-13 04:56:45
【问题描述】:
为什么 jdbc 使用 auto-commit true 而 spring-jpa/Hibernate 使用 auto-commit false?
为什么我对此感到困扰的是,这两个 api 都或多或少地用于实现功能。那么为什么采用这种不同的方法,一定有一些原因——我正在尝试探索。
我了解什么是自动提交 - 当使用带有默认设置的 JDBC 时,每个 SQL 语句都被视为一个事务。
【问题讨论】:
标签:
spring
spring-boot
jpa
jdbc
spring-data-jpa
【解决方案1】:
JPA 缺乏自动提交支持的原因可能是 JPA 和 SQL 具有不同的操作粒度。很多时候,像persist() 这样看似原子的EntityManager 操作会映射到多个SQL 语句(想想级联操作、辅助表等)。如果这样的操作失败,则不清楚 DB 实际最终处于什么状态。
JDBC 没有这个问题。大多数情况下,JDBC 操作和 SQL 语句之间存在一一对应的关系,这意味着当操作失败时,生成的 DB 状态仍然是一致且可预测的。