永続化コンテキストとは何ですか?


109

Javaの世界とJPAは初めてです。私はJPAを勉強していて、エンティティ、永続性などの多くの新しい用語に出くわしました。読んでいる間、永続コンテキストの正確な定義を理解できませんでした。

誰でも簡単に平易に説明できますか?で使用されているデータとは何@Entityですか?

たとえば、この定義は複雑すぎて理解できません。

永続コンテキストは、永続的なIDに対して一意のエンティティインスタンスが存在するようなエンティティのセットです。

回答:


86

永続コンテキストは、永続ストア(データベースなど)に永続化されるデータを保持する一連のエンティティを処理します。特に、コンテキストは、エンティティがコンテキストと基になる永続ストアの両方に関連してさまざまな状態(たとえば、管理、分離)を持つことができることを認識しています。

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


うーん、今では理にかなっています。コンテナ管理のエンティティマネージャーとアプリケーション管理のエンティティマネージャーの違いを示す同様の「シンプルな」定義はありますか?
Amrit 2013年

4
コンテナとアプリケーションは、基本的にはエンティティマネージャーが作成される場所を示します-コンテナーの外側、またはアプリケーションの内側。
uiron

66
  1. エンティティは、永続コンテキストを使用してjavax.persistence.EntityManagerインスタンスによって管理されます。
  2. EntityManagerインスタンスは 永続コンテキストに関連付けられてます
  3. 永続化コンテキスト内では、エンティティインスタンスとそのライフサイクルが管理されます。
  4. 永続コンテキストは定義範囲その下で特定のエンティティのインスタンスが作成され永続化、および除去します。
  5. 永続コンテキストは似ているキャッシュのセットが含ま永続エンティティを一度ので、トランザクションが終了し、すべての永続オブジェクトから切り離されているのEntityManagerの永続コンテキストとはもはや管理されていません。

1
トランザクションの完了後、EclipseLinkがエンティティを
切り離さ

コンテナ管理の永続コンテキストのキャッシュは、トランザクションの期間中のみ保持されます。トランザクションで読み込まれたエンティティは、トランザクションの完了後にデタッチされ、後続のトランザクションで編集するにはマージする必要があります。EclipseLink。@RayHulha
pritam kumar 2015

4
@pritamkumar、あなたは永続コンテキストの概念をよく説明しました。EntityManagerオブジェクトを注入し、注入されたオブジェクト(トランザクションなど)のスコープを確立するために使用されるjavax.persistence.PersistenceContextアノテーションもあることを追加します。
Paulo Merson 2016

30

このページからの引用:

JPAの世界のクイックチートシートは次のとおりです。

  • キャッシュはデータのコピーであり、データベースから取り出されたものの、データベースの外部に存在することを意味します。
  • キャッシュのフラッシュは、変更されたデータをデータベースに戻すことです。
  • PersistenceContextは基本的にキャッシュです。また、独自の非共有データベース接続を持つ傾向があります。
  • EntityManagerはPersistenceContext(したがってキャッシュ)を表します
  • EntityManagerFactoryはEntityManager(したがってPersistenceContext / Cache)を作成します

1つのPersisnteceContextにEntityManagerインスタンスを含めることができますか?また、1つのエンティティマネージャーが任意のPersistenceContextを持つことができますか?PersisntenceContextはすべてのアプリケーションに対して1つだけですか?
ロベルト

7

永続コンテキストは、データを保持し、データベースのようないくつかの永続ストレージに永続化する資格があるのエンティティを表します。我々一度commitに取り付けたこれらのエンティティを持っているセッションの下での取引、Hibernateは永続コンテキストをフラッシュし、変更(挿入/保存、更新または削除それらの上には)永続的なストレージに保持されます。


7

org.hibernate.SessionAPIとjavax.persistence.EntityManagerAPIはどちらも、永続データを処理するためのコンテキストを表します。

この概念は、永続コンテキストと呼ばれます。永続データには、永続コンテキストと基礎となるデータベースの両方に関連する状態があります。


5

「ある時点でエンティティーマネージャーインスタンスによって管理される永続化可能な(エンティティー)インスタンスのセット」は、永続化コンテキストと呼ばれます。

JPA @Entityアノテーションは永続化可能なエンティティを示します。

ここで JPA 定義を参照してください


4

簡単に言えば、永続コンテキストはエンティティが管理される環境、つまり「エンティティ」をデータベースと同期する環境であると言えます。


3

@pritam kumarが概要を説明していますが、5番目の点は正しくありません。

持続性コンテキストは、トランザクションスコープ(トランザクションの長さにわたって持続する「持続性」)または拡張(持続性コンテキストが複数のトランザクションにわたる)のいずれかです。

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

JPAのEntityManagerおよびHibernateのセッションは、拡張された永続コンテキストを提供します。


こんにちはuser2771889よろしくお願いします。永続コンテキストの拡張スコープについては言及しませんでした。5番目のポイントは、トランザクションスコープの永続化コンテキストに関連するだけでした。
pritam kumar 2016年

2

永続化コンテキストは、エンティティインスタンス(データを保持できるため、データベースに永続化できる機能)がエンティティマネージャーによって管理される環境またはキャッシュです。エンティティとデータベースを同期します。@ Entityアノテーションを持つすべてのオブジェクトが機能します持続することの。 @Entityは、データベースと通信するためにオブジェクトを作成するのに役立つクラスに過ぎません。オブジェクトが通信する方法はメソッドを使用しています。そして、それらのメソッドを提供するのはエンティティマネージャーです。


1
この回答は既存の回答とどのように異なりますか?
Akin Okegbile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.