java - 理解 `Pro JPA 2 Mastering the java Persistence API` 中的一段话吗?

标签 java jpa jpa-2.0

我是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 作为持久性提供者,

  1. 打开实体管理器。
  2. 创建新的 Employee 实体并对其调用 persist 方法。
  3. 它可能不会立即生成 insert 语句,因为 session 充当缓存后面的事务写入,并尝试将刷新推迟到最后一刻。
  4. 触发 JPQL 以获取使用实体管理器的员工数量
  5. 此时,您会看到在触发select count(*) from employee JPQL之前触发一条插入语句来保留新创建的员工。

因此,在这种情况下,它决定刷新状态,因为员工对象的插入可能会影响 JPQL 查询的结果。

关于java - 理解 `Pro JPA 2 Mastering the java Persistence API` 中的一段话吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49474741/

相关文章:

java - 为 Hibernate 创建通用 DAO 类

java - 具有共享 key (MapsId)和延迟加载问题的 OneToOne

java - 在第一个计划中禁用 Quartz 启动

java - 生成数据库错误以进行异常处理的方法

java - 如何在 "tell, don' 中进行单元测试并询问“追随者类?”

java - 覆盖@CollectionTable

java - 标准 API : filter by class type

java - JPA/Hibernate - 与 child 一起分离实体

java - 将 JFrame 设置为出现在中心不起作用?

java - JPA 通过时间戳获取条目