インターフェース EntityManagerFactory
- すべてのスーパーインターフェース:
AutoCloseableSE
EntityManager の新しいインスタンスを作成するために使用されるインターフェース。永続化ユニットは、アプリケーションによって関連またはグループ化され、単一のデータベースへのマッピングで同じ場所に配置する必要があるすべてのクラスのセットを定義します。2 つのエンティティ型が関連付けに参加している場合、同じ永続化ユニットに属している必要があります。
永続化ユニットは、persistence.xml ファイルによって定義することも、実行時に PersistenceConfiguration API を介して定義することもできます。
すべての永続ユニットにはトランザクション型 (JTA または RESOURCE_LOCAL) があります。リソースローカルトランザクションは、EntityTransaction インターフェースを介してプログラムで管理されます。
アプリケーションによってライフサイクルが管理される EntityManagerFactory は、Persistence クラスの静的操作を使用して作成できます。
- 永続化ユニットが
persistence.xmlで定義されている場合、エンティティマネージャーファクトリはPersistence.createEntityManagerFactory(String)またはPersistence.createEntityManagerFactory(String,Map)を呼び出すことによって作成できます。 - 永続化ユニットが
PersistenceConfigurationを使用して定義されている場合、エンティティマネージャーファクトリはPersistence.createEntityManagerFactory(PersistenceConfiguration)を呼び出すことによって作成できます。
通常、各永続性ユニットには EntityManagerFactory が 1 つだけ存在します。
あるいは、Jakarta EE 環境では、PersistenceUnit を使用した依存性注入によって、コンテナー管理の EntityManagerFactory を取得できます。
アプリケーション管理の EntityManager は、createEntityManager() の呼び出しを通じて作成できます。ただし、このアプローチでは、クリーンアップと例外管理の全責任がクライアントに課されるため、エラーが発生しやすいと考えられます。EntityManager を取得するには、メソッド runInTransaction(java.util.function.Consumer<jakarta.persistence.EntityManager>) および callInTransaction(java.util.function.Function<jakarta.persistence.EntityManager, R>) を使用する方がはるかに安全です。あるいは、Jakarta EE 環境では、PersistenceContext を使用した依存性注入によってコンテナー管理の EntityManager を取得でき、アプリケーションは EntityManagerFactory と直接対話する必要はありません。
EntityManagerFactory は、他の特定の便利な API へのアクセスを提供します。
- 永続化ユニットに関連付けられたマネージ型のモデルを公開する
Metamodelのインスタンスは、getMetamodel()を呼び出すことで取得できます。 - スキーマの生成と検証をプログラムで制御できる
SchemaManagerのインスタンスは、getSchemaManager()を呼び出すことで取得できます。 Cacheのインスタンスは、getCache()を呼び出すことで取得でき、2 次キャッシュを直接プログラムで制御できます。- 条件クエリの定義に使用される
CriteriaBuilderは、getCriteriaBuilder()を呼び出すことで取得できます。 PersistenceUnitUtilはgetPersistenceUnitUtil()を呼び出すことで取得できます。
アプリケーションがエンティティマネージャーファクトリの使用を終了したとき、またはアプリケーションが終了したときは、アプリケーションはエンティティマネージャーファクトリを close() する必要があります。必要に応じて、CleanerSE を使用できます。EntityManagerFactory が閉じられると、そのすべてのエンティティマネージャーは閉じられた状態にあると見なされます。
- 導入:
- 1.0
- 関連事項:
方法の概要
修飾子と型メソッド説明<T> voidaddNamedEntityGraph(StringSE graphName, EntityGraph<T> entityGraph) 指定されたEntityGraphの名前付きコピーをこのEntityManagerFactoryに追加します。voidaddNamedQuery(StringSE name, Query query) クエリ、型付きクエリ、ストアドプロシージャクエリを名前付きクエリとして定義し、その後EntityManager.createNamedQuery(java.lang.String)メソッドまたはEntityManager.createNamedStoredProcedureQuery(java.lang.String)メソッドを使用してそこからクエリオブジェクトを作成できるようにします。<R> RcallInTransaction(FunctionSE<EntityManager, R> work) アクティブなトランザクションを持つ新しいアプリケーション管理のEntityManagerを作成し、指定された関数を呼び出して、その関数にEntityManagerを渡します。voidclose()ファクトリを閉じて、保持しているリソースをすべて解放します。新しいアプリケーション管理のEntityManagerを作成します。createEntityManager(SynchronizationType synchronizationType) 指定された同期型を使用して、新しい JTA アプリケーション管理のEntityManagerを作成します。createEntityManager(SynchronizationType synchronizationType, MapSE<?, ?> map) 指定された同期型とプロパティのマップを使用して、新しい JTA アプリケーション管理のEntityManagerを作成します。createEntityManager(MapSE<?, ?> map) プロパティ設定を指定して、指定されたMapSE を使用して新しいアプリケーション管理のEntityManagerを作成します。getCache()エンティティマネージャーファクトリに関連付けられているキャッシュ(「第 2 レベルのキャッシュ」)にアクセスします。CriteriaQueryオブジェクトの構築に使用できるCriteriaBuilderのインスタンスを返します。永続化ユニットのメタモデルにアクセスするためのMetamodelインターフェースのインスタンスを返します。getName()永続性ユニットの名前。<E> MapSE<StringSE,EntityGraph<? extends E>> getNamedEntityGraphs(ClassSE<E> entityType) <R> MapSE<StringSE,TypedQueryReference<R>> getNamedQueries(ClassSE<R> resultType) 永続性ユニットのユーティリティメソッドへのアクセスを提供するインターフェースを返します。エンティティマネージャーファクトリに有効なプロパティと関連する値を取得します。永続化ユニットのスキーマ管理操作へのアクセスを提供する戻りインターフェース。この永続ユニットによって使用されるトランザクション管理の型 (リソースローカルトランザクション管理または JTA)。booleanisOpen()ファクトリが開いているかどうかを示します。voidアクティブなトランザクションを持つ新しいアプリケーション管理のEntityManagerを作成し、指定された関数を実行して、その関数にEntityManagerを渡します。<T> T指定された型のオブジェクトを返して、プロバイダー固有の API へのアクセスを許可します。
メソッドの詳細
createEntityManager
EntityManager createEntityManager()新しいアプリケーション管理のEntityManagerを作成します。このメソッドは呼び出されるたびに新しいEntityManagerインスタンスを返します。EntityManager.isOpen()メソッドは、返されたインスタンスに対して true を返します。- 戻り値:
- エンティティマネージャーインスタンス
- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合
createEntityManager
プロパティ設定を指定して、指定されたMapSE を使用して新しいアプリケーション管理のEntityManagerを作成します。このメソッドは呼び出されるたびに新しいEntityManagerインスタンスを返します。EntityManager.isOpen()メソッドは、返されたインスタンスに対して true を返します。- パラメーター:
map- エンティティマネージャーのプロパティ- 戻り値:
- エンティティマネージャーインスタンス
- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合
createEntityManager
指定された同期型を使用して、新しい JTA アプリケーション管理のEntityManagerを作成します。このメソッドは呼び出されるたびに新しいEntityManagerインスタンスを返します。EntityManager.isOpen()メソッドは、返されたインスタンスに対して true を返します。- パラメーター:
synchronizationType- エンティティマネージャーを現在の JTA トランザクションと同期する方法とタイミング- 戻り値:
- エンティティマネージャーインスタンス
- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリがリソースローカルエンティティマネージャー用に構成されているか、閉じられている場合- 導入:
- 2.1
createEntityManager
指定された同期型とプロパティのマップを使用して、新しい JTA アプリケーション管理のEntityManagerを作成します。このメソッドは呼び出されるたびに新しいEntityManagerインスタンスを返します。EntityManager.isOpen()メソッドは、返されたインスタンスに対して true を返します。- パラメーター:
synchronizationType- エンティティマネージャーを現在の JTA トランザクションと同期する方法とタイミングmap- エンティティマネージャーのプロパティ- 戻り値:
- エンティティマネージャーインスタンス
- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリがリソースローカルエンティティマネージャー用に構成されているか、閉じられている場合- 導入:
- 2.1
getCriteriaBuilder
CriteriaBuilder getCriteriaBuilder()CriteriaQueryオブジェクトの構築に使用できるCriteriaBuilderのインスタンスを返します。- 戻り値:
CriteriaBuilderのインスタンス- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合- 導入:
- 2.0
- 関連事項:
getMetamodel
Metamodel getMetamodel()永続化ユニットのメタモデルにアクセスするためのMetamodelインターフェースのインスタンスを返します。- 戻り値:
Metamodelのインスタンス- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合- 導入:
- 2.0
isOpen
boolean isOpen()ファクトリが開いているかどうかを示します。ファクトリが閉じられるまで true を返します。- 戻り値:
- ファクトリが開いているかどうかを示すブール値
close
void close()ファクトリを閉鎖し、ファクトリに保持されているリソースをすべて解放します。ファクトリインスタンスが閉じられると、そのインスタンスで呼び出されたすべてのメソッドはIllegalStateExceptionSE をスローします。ただし、isOpen()は false を返します。EntityManagerFactoryが閉じられると、そのすべてのエンティティマネージャーは閉じられた状態であるとみなされます。- 次で指定:
- インターフェース
AutoCloseableSEのclose - 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合
getName
StringSE getName()永続性ユニットの名前。- 導入:
- 3.2
getProperties
エンティティマネージャーファクトリに有効なプロパティと関連する値を取得します。マップの内容を変更しても、有効な構成は変更されません。- 戻り値:
- プロパティ
- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合- 導入:
- 2.0
getCache
Cache getCache()エンティティマネージャーファクトリに関連付けられているキャッシュ(「第 2 レベルのキャッシュ」)にアクセスします。- 戻り値:
Cacheのインスタンス、または使用中の 2 次キャッシュがない場合は null- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合- 導入:
- 2.0
getPersistenceUnitUtil
PersistenceUnitUtil getPersistenceUnitUtil()永続性ユニットのユーティリティメソッドへのアクセスを提供するインターフェースを返します。- 戻り値:
PersistenceUnitUtilのインスタンス- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合- 導入:
- 2.0
getTransactionType
PersistenceUnitTransactionType getTransactionType()この永続ユニットによって使用されるトランザクション管理の型 (リソースローカルトランザクション管理または JTA)。- 導入:
- 3.2
getSchemaManager
SchemaManager getSchemaManager()永続化ユニットのスキーマ管理操作へのアクセスを提供する戻りインターフェース。- 戻り値:
SchemaManagerのインスタンス- 例外:
IllegalStateExceptionSE- エンティティマネージャーファクトリが閉じられている場合- 導入:
- 3.2
addNamedQuery
クエリ、型付きクエリ、ストアドプロシージャクエリを名前付きクエリとして定義し、その後EntityManager.createNamedQuery(java.lang.String)メソッドまたはEntityManager.createNamedStoredProcedureQuery(java.lang.String)メソッドを使用してそこからクエリオブジェクトを作成できるようにします。名前付きクエリが追加されたときに有効なクエリオブジェクトの構成(実際のパラメーターバインドを除く)は、名前付きクエリ定義の一部として保持されます。これには、最大結果、ヒント、フラッシュモード、ロックモード、結果セットマッピング情報、ストアドプロシージャのパラメーターに関する情報などの構成情報が含まれます。
クエリが実行されると、クエリ API を使用して設定できる情報がオーバーライドされる可能性があります。オーバーライドされた情報は、エンティティマネージャーファクトリに登録されている名前付きクエリには影響しないため、
createNamedQueryまたはcreateNamedStoredProcedureQueryを呼び出してそのクエリから作成される後続のクエリオブジェクトには影響しません。同じ名前の名前付きクエリが以前にメタデータまたはこのメソッドを介して静的に定義されている場合、そのクエリ定義は置き換えられます。
- パラメーター:
name- クエリの名前query-Query、TypedQuery、またはStoredProcedureQuery- 導入:
- 2.1
unwrap
指定された型のオブジェクトを返して、プロバイダー固有の API へのアクセスを許可します。EntityManagerFactoryのプロバイダ実装が指定された型をサポートしていない場合、PersistenceExceptionがスローされます。- パラメーター:
cls- 返されるオブジェクトのクラス。これは通常、EntityManagerFactoryを実装する基礎となるクラス、またはそれが実装するインターフェースのいずれかです。- 戻り値:
- 指定されたクラスのインスタンス
- 例外:
PersistenceException- プロバイダーが指定された型をサポートしていない場合- 導入:
- 2.1
addNamedEntityGraph
指定されたEntityGraphの名前付きコピーをこのEntityManagerFactoryに追加します。指定された名前のエンティティグラフがすでに存在する場合は、置き換えられます。- パラメーター:
graphName- エンティティグラフの名前entityGraph- エンティティグラフ- 導入:
- 2.1
getNamedQueries
- 型パラメーター:
R- クエリ結果の型に指定された上限- パラメーター:
resultType- すべてのクエリを意味するObject.classを含む任意の Java 型- 戻り値:
- クエリ名をキーとしたマップ
- 導入:
- 3.2
getNamedEntityGraphs
- 型パラメーター:
E- エンティティグラフ型の指定された上限- パラメーター:
entityType- すべてのエンティティグラフを意味するObject.classを含む任意の Java 型- 戻り値:
- グラフ名をキーとしたマップ
- 導入:
- 3.2
runInTransaction
アクティブなトランザクションを持つ新しいアプリケーション管理のEntityManagerを作成し、指定された関数を実行して、その関数にEntityManagerを渡します。永続化ユニットのトランザクション型が JTA で、呼び出し元にすでに関連付けられている JTA トランザクションがある場合、
EntityManagerはこの現在のトランザクションに関連付けられます。指定された関数が例外をスローした場合、JTA トランザクションはロールバックのマークが付けられ、例外が再スローされます。それ以外の場合、永続化ユニットのトランザクション型がリソースローカルである場合、または呼び出し元にすでに関連付けられている JTA トランザクションがない場合、
EntityManagerは新しいトランザクションに関連付けられます。指定された関数が例外をスローせずに戻った場合、このトランザクションはコミットされます。関数が例外をスローした場合、トランザクションはロールバックされ、例外が再スローされます。最後に、このメソッドが制御をクライアントに返す前に、
EntityManagerが閉じられます。- パラメーター:
work- トランザクションのスコープ内で実行される関数- 導入:
- 3.2
callInTransaction
アクティブなトランザクションを持つ新しいアプリケーション管理のEntityManagerを作成し、指定された関数を呼び出して、その関数にEntityManagerを渡します。永続化ユニットのトランザクション型が JTA で、呼び出し元にすでに関連付けられている JTA トランザクションがある場合、
EntityManagerはこの現在のトランザクションに関連付けられます。指定された関数が例外をスローせずに戻った場合、関数の結果が返されます。指定された関数が例外をスローした場合、JTA トランザクションはロールバックのマークが付けられ、例外が再スローされます。それ以外の場合、永続化ユニットのトランザクション型がリソースローカルである場合、または呼び出し元にすでに関連付けられている JTA トランザクションがない場合、
EntityManagerは新しいトランザクションに関連付けられます。指定された関数が例外をスローせずに戻った場合、このトランザクションはコミットされ、関数の結果が返されます。関数が例外をスローした場合、トランザクションはロールバックされ、例外が再スローされます。最後に、このメソッドが制御をクライアントに返す前に、
EntityManagerが閉じられます。- パラメーター:
work- トランザクションのスコープ内で呼び出される関数- 戻り値:
- 指定された関数によって返される値
- 導入:
- 3.2