我是JPA
的新手,我正在阅读Pro JPA 2 Mastering the java Persistence API
并且我已经阅读了以下段落:
a flush of the persistence context could occur at any time if the persistence provider deems it necessary.
我的问题
- 什么是
认为有必要
? - 在哪些情况下提供商
认为有必要
?
我想详细了解这句话的含义认为有必要
。欢迎任何帮助,提前致谢。
最佳答案
这样的场景如下 JPA 2.1 Specification - Section 3.10.8 Queries and Flush Mode - 持久化提供者负责确保持久化上下文中所有实体状态的所有更新(可能会影响查询结果)对于查询处理都是可见的。
虽然它依赖于实现,但您可以注意到以下行为,其中 hibernate 作为持久性提供程序决定在触发 HQL 之前刷新,因为持久性上下文中的状态可能会影响查询结果。
因此,使用 Hibernate 作为持久性提供者,
- 打开实体管理器。
- 创建新的
Employee
实体并对其调用persist
方法。 - 它可能不会立即生成
insert
语句,因为 session 充当缓存后面的事务写入,并尝试将刷新推迟到最后一刻。 - 触发 JPQL 以获取
使用实体管理器的员工数量
。 - 此时,您会看到在触发
select count(*) from employee JPQL
之前触发一条插入语句来保留新创建的员工。
因此,在这种情况下,它决定刷新状态,因为员工对象的插入可能会影响 JPQL 查询的结果。
关于java - 理解 `Pro JPA 2 Mastering the java Persistence API` 中的一段话吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49474741/