我是Java世界和JPA的新手。我正在学习JPA,并遇到了许多新的术语,如实体,持久性。在阅读时,我无法理解持久性上下文的确切定义。
任何人都可以用简单的外行来解释它吗?它与@Entity
中使用的数据有什么关系?
例如,我发现这个定义太复杂而无法理解:
持久化上下文是一组实体,对于任何持久性标识,都有一个唯一的实体实例。
答案 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)
答案 2 :(得分:18)
取自this页面:
这是JPA世界的快速备忘单:
答案 3 :(得分:4)
org.hibernate.Session API和javax.persistence.EntityManager API都代表了处理持久数据的上下文。这个概念称为持久化上下文。持久性数据具有与持久性上下文和底层数据库相关的状态。
答案 4 :(得分:4)
持久化上下文表示保存数据并且有资格持久保存在某些持久存储(如数据库)中的实体。一旦我们commit
在附加了这些实体的会话下进行了事务, Hibernate就会刷新持久性上下文并更改(插入/保存,更新或删除)它们被持久存储在持久存储中。
答案 5 :(得分:3)
持久性上下文是一个环境或缓存,其中实体实例(能够保存数据并因此能够持久保存在其中)数据库)由 Entity Manager 管理。它将实体与数据库同步。所有带有 @Entity 批注的对象都可以保留。 @Entity 只是一个类,可以帮助我们创建对象以与数据库进行通信。对象之间的通信方式是使用方法,而提供这些方法的是实体管理器。
答案 6 :(得分:2)
答案 7 :(得分:1)
虽然@pritam kumar给出了一个很好的概述,但第五点并不正确。
持久性上下文可以是事务范围 - 持久性 语境生活'对于交易的长度,或扩展 - 持久性上下文跨越多个事务。
https://blogs.oracle.com/carolmcdonald/entry/jpa_caching
JPA的EntityManager和Hibernate会话提供了扩展的持久化上下文。
答案 8 :(得分:0)
用通俗易懂的术语来说,我们可以说持久性上下文是一种管理实体的环境,即它将“实体”与数据库同步。