在JPA中,如果我尝试使用setter和getter方法更新托管对象而不使用事务开始和提交,那么考虑到FlushType
AUTO
,JPA会自动更新数据库(不是立即更新) }。
答案 0 :(得分:7)
在JPA中,实体状态转换不会自动与数据库同步。如果实体附加到持久性上下文,则在flush-time,automatic dirty checking mechanism将对象状态更改转换为DML语句。
但是这需要实体由持久化上下文管理,否则,脏检查机制将不会触发。
虽然JPA规范只需要将entity state transitions包装在逻辑事务中:
You should ALWAYS use transaction,即使只是阅读数据。
如果在读取数据时没有显式使用事务,那么您将回退到自动提交模式,给连接池机制带来额外压力,最终每个查询都有一个数据库事务。
答案 1 :(得分:0)
我使用的实现(DataNucleus JPA)允许这样做(就像自动提交模式一样)。如果未启用该模式,那么它将回退到JPA所做的标准,即在下一次交易之前保留这些更改。