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