我是 Java 世界和 JPA 的新手。我当时正在学习 JPA,遇到了许多新术语,比如实体、持久性。在阅读时,我不能理解 持久性上下文的确切定义。
有人能用简单的外行术语解释一下吗? 这和 @Entity中使用的数据有什么关系?
@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
在 JavaEE 中,持久化上下文通常通过 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
org.hibernate.Session API 和 javax.persistence.EntityManager API 都表示用于处理持久数据的上下文。
org.hibernate.Session
javax.persistence.EntityManager
这个概念称为 持久性上下文。持久性数据具有与持久性上下文和基础数据库相关的状态。
尽管@pritam kumar 给出了一个很好的概述,但第五点并不正确。
持久性上下文可以是事务作用域——持久性 事务长度的上下文“生存”,或者扩展——事务的 持久化上下文跨越多个事务。
Https://blogs.oracle.com/carolmcdonald/entry/jpa_caching
JPA 的 EntityManager 和 Hibernate 的 Session 提供了扩展的持久化上下文。
持续的上下文表示持有数据的实体,这些实体有资格像数据库一样持久存储在某些持久存储中。一旦我们 commit会话下的一个事务附加了这些实体,Hibernate 刷新持久上下文和它们上面的更改(插入/保存、更新或删除)就会保持在持久存储中。
commit
摘自 这个页:
这里有一个 JPA 世界的小抄:
“在给定时间由实体管理器实例管理的一组可持久化(实体)实例”称为持久化上下文。
JPA@Entity 注释表示一个可持久化的实体。
参考 JPA 定义在这里
通俗地说,我们可以说持久化上下文是一个管理实体的环境,即它将“实体”与数据库同步。
持久化上下文 是一个 环境或 缓存,其中实体实例(能够保存数据,因此能够在数据库中持久化)由 实体经理管理。它将实体与数据库同步。所有具有 @ 实体注释的对象都能够被持久化。 @ Entity 只不过是一个帮助我们创建对象以便与数据库通信的类。对象通信的方式是使用方法。提供这些方法的是实体管理器。