gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:14:35 24 4
gpt4 key购买 nike

我是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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com