インターフェース 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() する必要があります。必要に応じて、Cleaner
SE を使用できます。EntityManagerFactory
が閉じられると、そのすべてのエンティティマネージャーは閉じられた状態にあると見なされます。
- 導入:
- 1.0
- 関連事項:
メソッドのサマリー
修飾子と型メソッド説明<T> void
addNamedEntityGraph
(StringSE graphName, EntityGraph<T> entityGraph) 指定されたEntityGraph
の名前付きコピーをこのEntityManagerFactory
に追加します。void
addNamedQuery
(StringSE name, Query query) クエリ、型付きクエリ、ストアドプロシージャクエリを名前付きクエリとして定義し、その後EntityManager.createNamedQuery(java.lang.String)
メソッドまたはEntityManager.createNamedStoredProcedureQuery(java.lang.String)
メソッドを使用してそこからクエリオブジェクトを作成できるようにします。<R> R
callInTransaction
(FunctionSE<EntityManager, R> work) アクティブなトランザクションを持つ新しいアプリケーション管理のEntityManager
を作成し、指定された関数を呼び出して、その関数にEntityManager
を渡します。void
close()
ファクトリを閉じて、保持しているリソースをすべて解放します。新しいアプリケーション管理のEntityManager
を作成します。createEntityManager
(SynchronizationType synchronizationType) 指定された同期型を使用して、新しい JTA アプリケーション管理のEntityManager
を作成します。createEntityManager
(SynchronizationType synchronizationType, MapSE<?, ?> map) 指定された同期型とプロパティのマップを使用して、新しい JTA アプリケーション管理のEntityManager
を作成します。createEntityManager
(MapSE<?, ?> map) プロパティ設定を指定して、指定されたMap
SE を使用して新しいアプリケーション管理の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)。boolean
isOpen()
ファクトリが開いているかどうかを示します。void
アクティブなトランザクションを持つ新しいアプリケーション管理のEntityManager
を作成し、指定された関数を実行して、その関数にEntityManager
を渡します。<T> T
指定された型のオブジェクトを返して、プロバイダー固有の API へのアクセスを許可します。
メソッドの詳細
createEntityManager
EntityManager createEntityManager()新しいアプリケーション管理のEntityManager
を作成します。このメソッドは呼び出されるたびに新しいEntityManager
インスタンスを返します。EntityManager.isOpen()
メソッドは、返されたインスタンスに対して true を返します。- 戻り値:
- エンティティマネージャーインスタンス
- 例外:
IllegalStateExceptionSE
- エンティティマネージャーファクトリが閉じられている場合
createEntityManager
プロパティ設定を指定して、指定されたMap
SE を使用して新しいアプリケーション管理の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()ファクトリを閉鎖し、ファクトリに保持されているリソースをすべて解放します。ファクトリインスタンスが閉じられると、そのインスタンスで呼び出されたすべてのメソッドはIllegalStateException
SE をスローします。ただし、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