我是 Java 世界和 JPA 的新手。我在学习 JPA 时遇到了许多新术语,例如实体、持久性。阅读时,我无法理解Persistence Context的确切定义。
任何人都可以用简单的外行术语解释它吗?它与 中使用的数据有什么关系@Entity
?
例如,我发现这个定义太复杂而难以理解:
持久性上下文是一组实体,因此对于任何持久性身份,都有一个唯一的实体实例。
我是 Java 世界和 JPA 的新手。我在学习 JPA 时遇到了许多新术语,例如实体、持久性。阅读时,我无法理解Persistence Context的确切定义。
任何人都可以用简单的外行术语解释它吗?它与 中使用的数据有什么关系@Entity
?
例如,我发现这个定义太复杂而难以理解:
持久性上下文是一组实体,因此对于任何持久性身份,都有一个唯一的实体实例。
持久性上下文处理一组实体,这些实体保存要在某个持久性存储(例如数据库)中持久化的数据。特别地,上下文知道实体可以具有与上下文和底层持久性存储相关的不同状态(例如,托管、分离)。
尽管与 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
取自此页面:
这是 JPA 世界的快速备忘单:
持久化上下文表示持有数据并有资格被持久化在一些持久性存储(如数据库)中的实体。一旦我们commit
在附加了这些实体的会话下进行事务处理,Hibernate 就会刷新持久化上下文,并且它们上的更改(插入/保存、更新或删除)将持久化存储在持久化存储中。
org.hibernate.Session
API 和API都javax.persistence.EntityManager
表示处理持久数据的上下文。
这个概念称为持久性上下文。持久数据具有与持久上下文和底层数据库相关的状态。
持久性上下文是一个环境或缓存,其中实体实例(能够保存数据并因此能够在数据库中持久化)由实体管理器管理。它将实体与数据库同步。所有具有@Entity注释的对象都能够被坚持。 @Entity只不过是一个类,它帮助我们创建对象以便与数据库通信。对象通信的方式是使用方法。提供这些方法的是实体管理器。
通俗地说,我们可以说持久性上下文是一个管理实体的环境,即它使“实体”与数据库同步。
虽然@pritam kumar 给出了一个很好的概述,但第 5 点是不正确的。
Persistence Context 可以是 Transaction Scoped——Persistence Context 在事务长度内“存在”,也可以是 Extended——Persistence Context 跨越多个事务。
https://blogs.oracle.com/carolmcdonald/entry/jpa_caching
JPA 的 EntityManager 和 Hibernate 的 Session 提供了扩展的持久性上下文。