什么是持久性语境?

时间:2013-11-12 13:12:45

标签: java jpa orm persistence

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

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

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

  

持久化上下文是一组实体,对于任何持久性标识,都有一个唯一的实体实例。

9 个答案:

答案 0 :(得分:69)

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

虽然与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

http://gerrydevstory.com/wp-content/uploads/2012/05/jpa-state-transtition.png

答案 1 :(得分:39)

  1. 实体由 javax.persistence.EntityManager 实例使用持久性上下文进行管理。
  2. 每个 EntityManager 实例都与 a 持久性上下文 相关联。
  3. 持久性上下文中,管理实体实例及其生命周期。
  4. 持久性上下文定义范围,在该范围下创建,保留和删除特定实体实例。
  5. 持久性上下文就像 缓存 ,其中包含一组持久性实体,所以一旦< strong>事务已完成,所有持久对象都与 EntityManager的持久性上下文分离,不再受管理。

答案 2 :(得分:18)

取自this页面:

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

  • 缓存是数据的副本,复制含义是从数据库中提取出来的。
  • 刷新缓存是将修改后的数据放回数据库中的行为。
  • PersistenceContext本质上是一个Cache。它也倾向于拥有自己的非共享数据库连接。
  • EntityManager表示PersistenceContext(因此是缓存)
  • EntityManagerFactory创建一个EntityManager(因此是一个PersistenceContext / Cache)

答案 3 :(得分:4)

org.hibernate.Session API和javax.persistence.EntityManager API都代表了处理持久数据的上下文。这个概念称为持久化上下文。持久性数据具有与持久性上下文和底层数据库相关的状态。

答案 4 :(得分:4)

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

答案 5 :(得分:3)

持久性上下文是一个环境缓存,其中实体实例(能够保存数据并因此能够持久保存在其中)数据库)由 Entity Manager 管理。它将实体与数据库同步。所有带有 @Entity 批注的对象都可以保留。 @Entity 只是一个类,可以帮助我们创建对象以与数据库进行通信。对象之间的通信方式是使用方法,而提供这些方法的是实体管理器。

答案 6 :(得分:2)

&#34;在给定时间由实体管理器实例管理的一组可持久(实体)实例&#34;被称为持久化上下文。

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

参考JPA Definition here

答案 7 :(得分:1)

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

  

持久性上下文可以是事务范围 - 持久性   语境生活&#39;对于交易的长度,或扩展 -   持久性上下文跨越多个事务。

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

JPA的EntityManager和Hibernate会话提供了扩展的持久化上下文。

答案 8 :(得分:0)

用通俗易懂的术语来说,我们可以说持久性上下文是一种管理实体的环境,即它将“实体”与数据库同步。