什么是持久化上下文?

问题描述 投票:0回答:10

我是 Java 世界和 JPA 的新手。我在学习 JPA 时遇到了很多新术语,比如实体、持久化。在阅读时,我无法理解Persistence Context的确切定义。

谁能用通俗易懂的语言解释一下?它与

@Entity
中使用的数据有什么关系?

例如,我发现这个定义太复杂了,难以理解:

持久化上下文是一组实体,对于任何持久化身份来说,都有一个唯一的实体实例。

java jpa orm persistence
10个回答
104
投票

持久化上下文处理一组实体,这些实体保存要持久化在某个持久化存储(例如数据库)中的数据。特别是,上下文知道实体可以具有与上下文和底层持久性存储相关的不同状态(例如托管、分离)。

虽然与 Hibernate 相关(JPA 提供商),但我认为这些链接很有用:

http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch03.html

http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/architecture.html

在 Java EE 中,持久化上下文通常通过 EntityManager 访问。

http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html

实体可以具有的各种状态以及这些状态之间的转换如下所述:

http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/objectstate.html

https://vladmihalcea.com/wp-content/uploads/2014/07/jpaentitystates.png


88
投票
  1. 实体由 javax.persistence.EntityManager 实例使用持久性上下文进行管理。
  2. 每个 EntityManager 实例都与 a 持久化上下文相关联。
  3. 持久化上下文中,管理实体实例及其生命周期。
  4. 持久化上下文定义了范围,在其中创建、持久化和删除特定实体实例。
  5. 一个持久化上下文就像一个缓存,其中包含一组持久化实体,因此一旦事务完成,所有持久化对象都会从EntityManager的持久化上下文分离并且不再被管理。

51
投票

摘自页面:

这是 JPA 世界的快速备忘单:

  • 缓存是数据的副本,副本意味着从数据库中提取但位于数据库之外。
  • 刷新缓存是将修改后的数据放回数据库的行为。
  • PersistenceContext 本质上是一个 Cache。它还往往有自己的非共享数据库连接。
  • EntityManager 代表 PersistenceContext(因此也是 Cache)
  • EntityManagerFactory 创建 EntityManager(因此创建 PersistenceContext/Cache)

10
投票

持久上下文表示保存数据并有资格持久保存在数据库等持久存储中的实体。一旦我们commit

会话下的事务附加了这些实体,
Hibernate就会刷新持久上下文,并且对它们的更改(插入/保存、更新或删除)将持久保存在持久存储中。


10
投票

org.hibernate.Session

 API 和
javax.persistence.EntityManager
 API 都代表了处理持久数据的上下文。 

这个概念称为“持久上下文”。持久数据具有与持久上下文和底层数据库相关的状态。

通俗地说,我们可以说持久化上下文是一个管理实体的环境,即将“实体”与数据库同步。

7
投票


6
投票
是一个

环境缓存,其中实体实例(能够保存数据,从而能够持久保存在数据库中)由实体管理器管理。它将实体与数据库同步.所有具有@Entity注释的对象都能够被持久化。 @Entity只不过是一个类,它帮助我们创建对象以便与数据库通信。对象通信的方式是使用方法。而提供这些方法的是实体管理器。

“在给定时间由实体管理器实例管理的一组可持久(实体)实例”称为持久化上下文。

5
投票
JPA @Entity 注解表示可持久实体。

参考 JPA

此处定义

虽然@pritam kumar 给出了很好的概述,但第五点并不正确。

4
投票

持久化上下文可以是事务范围——持久化 上下文在事务的持续时间内“存在”,或扩展—— 持久化上下文跨越多个事务。

https://blogs.oracle.com/carolmcdonald/entry/jpa_caching

JPA 的 EntityManager 和 Hibernate 的 Session 提供了扩展的持久性上下文。

持久化上下文是一级缓存,所有实体都从数据库中获取或保存到数据库中。

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.