JPA和Hibernate是否在没有事务开始和提交的情况下自动更新数据库

时间:2015-01-18 03:56:13

标签: java hibernate jpa orm transactions

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

答案 1 :(得分:0)

我使用的实现(DataNucleus JPA)允许这样做(就像自动提交模式一样)。如果未启用该模式,那么它将回退到JPA所做的标准,即在下一次交易之前保留这些更改。