【问题标题】:Does JPA and Hibernate automatically update database without transaction begin and commitJPA 和 Hibernate 是否在没有事务开始和提交的情况下自动更新数据库
【发布时间】:2015-03-16 09:59:51
【问题描述】:

在 JPA 中,如果我尝试使用 setter 和 getter 方法更新托管对象而不使用事务开始和提交,考虑到 FlushType 位于 AUTO 中,JPA 是否会自动更新数据库(不是立即更新,而是稍后更新)。

【问题讨论】:

标签: java hibernate jpa orm transactions


【解决方案1】:

在 JPA 中,实体状态转换不会自动与数据库同步。如果实体附加到持久性上下文,则在flush-timeautomatic dirty checking mechanism 将对象状态更改转换为 DML 语句。

但这需要实体由持久化上下文管理,否则脏检查机制不会触发。

虽然 JPA 规范只要求将 entity state transitions 包装在逻辑事务中:

You should ALWAYS use transaction,即使只读取数据。

如果您在读取数据时没有显式使用事务,那么您会退回到自动提交模式,给连接池机制带来额外压力,并最终导致每个查询一个数据库事务。

【讨论】:

    【解决方案2】:

    我使用的实现(DataNucleus JPA)确实允许这样做(如自动提交模式)。如果未启用该模式,则它会退回到标准 JPA 所做的事情,即在下一个事务之前保留这些更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 2018-06-09
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多