JPA中的哪些操作绕过Persistance context / Cache并直接在数据库中调用?

时间:2016-06-15 06:20:29

标签: java hibernate jpa

我指的是用于学习JPA的 Pro JPA2 书。它说查询,批量更新和批量删除绕过持久化上下文并在数据库中执行,这是否意味着这些操作不会在持久化上下文并直接在数据库中调用。 例如在持久化上下文上执行 find 方法,但在数据库上执行select / update / delete查询。 查找可能会或可能不会点击数据库,但 SELECT / UPDATE / DELETE 会点击数据库。
请在这里提供更多见解

1 个答案:

答案 0 :(得分:1)

  

是否意味着这些操作不会在持久化上下文中执行,而是直接在数据库中调用

JPA 2.0 Specification(参见下面的摘录)并未声明操作不会使用持久性上下文。但是,对于已经在内存或缓存中的实体,这些操作的结果将不会反映出来。

  

4.10批量更新和删除操作

     

...

     

批量更新直接映射到数据库更新操作,绕过乐观锁定检查。如果需要,可移植应用程序必须手动更新版本列的值,和/或手动验证版本列的值。

     

持久性上下文与批量更新或删除的结果不同步。

     

执行批量更新或删除操作时应该小心,因为它们可能导致数据库与活动持久性上下文中的实体之间出现不一致。通常,批量更新和删除操作应仅在新持久性上下文中的事务中执行,或者在获取或访问其状态可能受此类操作影响的实体之前执行。