136

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

任何人都可以用简单的外行术语解释它吗?它与 中使用的数据有什么关系@Entity

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

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

4

9 回答 9

103

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

尽管与 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

于 2013-11-12T13:27:42.327 回答
80
  1. 实体由javax.persistence.EntityManager实例使用持久性上下文进行管理。
  2. 每个EntityManager实例都与一个 持久性上下文相关联。
  3. 持久性上下文中,管理实体实例及其生命周期。
  4. 持久性上下文定义了一个范围,在该范围内创建、持久化和删除特定实体实例。
  5. 持久化上下文就像一个缓存其中包含一组持久化实体,所以一旦事务完成,所有持久化对象都会从EntityManager 的持久化上下文中分离出来,不再被管理。
于 2015-04-28T05:17:16.010 回答
43

取自页面:

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

  • 缓存是数据的副本,副本意味着从数据库中提取但存在于数据库之外。
  • 刷新缓存是将修改后的数据放回数据库的行为。
  • PersistenceContext 本质上是一个缓存。它也倾向于拥有自己的非共享数据库连接。
  • EntityManager 代表一个 PersistenceContext(因此是一个缓存)
  • EntityManagerFactory 创建一个 EntityManager(因此是一个 PersistenceContext/Cache)
于 2017-05-22T17:56:35.010 回答
9

持久化上下文表示持有数据并有资格被持久化在一些持久性存储(如数据库)中的实体。一旦我们commit在附加了这些实体的会话下进行事务处理,Hibernate 就会刷新持久化上下文,并且它们上的更改(插入/保存、更新或删除)将持久化存储在持久化存储中。

于 2017-03-05T14:17:10.797 回答
8

org.hibernate.SessionAPI 和API都javax.persistence.EntityManager表示处理持久数据的上下文。

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

于 2014-03-22T13:05:49.947 回答
6

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

于 2020-06-10T18:26:22.213 回答
5

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

于 2019-06-29T15:26:23.757 回答
5

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

JPA @Entity 注释表示一个可持久化的实体。

请参阅此处的 JPA定义

于 2017-06-16T07:19:44.923 回答
4

虽然@pritam kumar 给出了一个很好的概述,但第 5 点是不正确的。

Persistence Context 可以是 Transaction Scoped——Persistence Context 在事务长度内“存在”,也可以是 Extended——Persistence Context 跨越多个事务。

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

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

于 2016-05-28T09:47:58.233 回答