理解`Pro JPA 2掌握java Persistence API`中的一段话?

时间:2018-03-25 10:20:30

标签: java jpa jpa-2.0

我是JPA的新手,我正在阅读Pro JPA 2 Mastering the java Persistence API,我已阅读以下段落:

  

如果有的话,可以随时发生持久化上下文的刷新   持久性提供者认为有必要。

我的问题

  • 什么是deems it necessary
  • 在哪些情况下,提供商deems it necessary

我想理解这句话deems it necessary的详细含义。欢迎任何帮助,提前谢谢。

1 个答案:

答案 0 :(得分:2)

其中一种情况是根据JPA 2.1 Specification - Section 3.10.8 Queries and Flush Mode - The persistence provider is responsible for ensuring that all updates to the state of all entities in the persistence context which could potentially affect the result of the query are visible to the processing of the query.

虽然它是依赖于实现的,但你可以注意到hibernate的下面行为,因为持久性提供程序决定在触发HQL之前刷新,因为持久化上下文中的状态可能会影响查询结果。

因此,将Hibernate作为持久性提供程序,

  1. 打开entityManager。
  2. 创建新的Employee实体并在其上调用persist方法。
  3. 它可能不会导致立即insert语句,因为会话充当缓存后面的事务写入,并尝试将刷新推迟到最后一刻。
  4. 触发JPQL以获取count of employees using the entityManager
  5. 此时,您会看到激活插入语句以在触发select count(*) from employee JPQL之前保留新创建的员工。
  6. 所以在这种情况下,它决定刷新状态,因为插入employee对象可能会影响JPQL查询的结果。