パッケージ jakarta.persistence

インターフェース EntityManagerFactory

すべてのスーパーインターフェース:
AutoCloseableSE

public interface EntityManagerFactory extends AutoCloseableSE
永続化ユニットと対話し、EntityManager の新しいインスタンスを作成するために使用されるインターフェース。

永続化ユニットは、アプリケーションによって関連またはグループ化され、単一のデータベースへのマッピングで同じ場所に配置する必要があるすべてのクラスのセットを定義します。2 つのエンティティ型が関連付けに参加している場合、同じ永続化ユニットに属している必要があります。

永続化ユニットは、persistence.xml ファイルによって定義することも、実行時に PersistenceConfiguration API を介して定義することもできます。

すべての永続ユニットにはトランザクション型 (JTA または RESOURCE_LOCAL) があります。リソースローカルトランザクションは、EntityTransaction インターフェースを介してプログラムで管理されます。

アプリケーションによってライフサイクルが管理される EntityManagerFactory は、Persistence クラスの静的操作を使用して作成できます。

通常、各永続性ユニットには 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 へのアクセスを提供します。

アプリケーションがエンティティマネージャーファクトリの使用を終了したとき、またはアプリケーションが終了したときは、アプリケーションはエンティティマネージャーファクトリを close() する必要があります。必要に応じて、CleanerSE を使用できます。EntityManagerFactory が閉じられると、そのすべてのエンティティマネージャーは閉じられた状態にあると見なされます。

導入:
1.0
関連事項:
  • メソッドの詳細

    • createEntityManager

      EntityManager createEntityManager()
      新しいアプリケーション管理の EntityManager を作成します。このメソッドは呼び出されるたびに新しい EntityManager インスタンスを返します。

      EntityManager.isOpen() メソッドは、返されたインスタンスに対して true を返します。

      戻り値:
      エンティティマネージャーインスタンス
      例外:
      IllegalStateExceptionSE - エンティティマネージャーファクトリが閉じられている場合
    • createEntityManager

      EntityManager createEntityManager(MapSE<?,?> map)
      プロパティ設定を指定して、指定された MapSE を使用して新しいアプリケーション管理の EntityManager を作成します。このメソッドは呼び出されるたびに新しい EntityManager インスタンスを返します。

      EntityManager.isOpen() メソッドは、返されたインスタンスに対して true を返します。

      パラメーター:
      map - エンティティマネージャーのプロパティ
      戻り値:
      エンティティマネージャーインスタンス
      例外:
      IllegalStateExceptionSE - エンティティマネージャーファクトリが閉じられている場合
    • createEntityManager

      EntityManager createEntityManager(SynchronizationType synchronizationType)
      指定された同期型を使用して、新しい JTA アプリケーション管理の EntityManager を作成します。このメソッドは呼び出されるたびに新しい EntityManager インスタンスを返します。

      EntityManager.isOpen() メソッドは、返されたインスタンスに対して true を返します。

      パラメーター:
      synchronizationType - エンティティマネージャーを現在の JTA トランザクションと同期する方法とタイミング
      戻り値:
      エンティティマネージャーインスタンス
      例外:
      IllegalStateExceptionSE - エンティティマネージャーファクトリがリソースローカルエンティティマネージャー用に構成されているか、閉じられている場合
      導入:
      2.1
    • createEntityManager

      EntityManager createEntityManager(SynchronizationType synchronizationType, MapSE<?,?> map)
      指定された同期型とプロパティのマップを使用して、新しい 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 が閉じられると、そのすべてのエンティティマネージャーは閉じられた状態であるとみなされます。
      次で指定:
      インターフェース AutoCloseableSEclose 
      例外:
      IllegalStateExceptionSE - エンティティマネージャーファクトリが閉じられている場合
    • getName

      StringSE getName()
      永続性ユニットの名前。
      導入:
      3.2
    • getProperties

      MapSE<StringSE,ObjectSE> 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

      void addNamedQuery(StringSE name, Query query)
      クエリ、型付きクエリ、ストアドプロシージャクエリを名前付きクエリとして定義し、その後 EntityManager.createNamedQuery(java.lang.String) メソッドまたは EntityManager.createNamedStoredProcedureQuery(java.lang.String) メソッドを使用してそこからクエリオブジェクトを作成できるようにします。

      名前付きクエリが追加されたときに有効なクエリオブジェクトの構成(実際のパラメーターバインドを除く)は、名前付きクエリ定義の一部として保持されます。これには、最大結果、ヒント、フラッシュモード、ロックモード、結果セットマッピング情報、ストアドプロシージャのパラメーターに関する情報などの構成情報が含まれます。

      クエリが実行されると、クエリ API を使用して設定できる情報がオーバーライドされる可能性があります。オーバーライドされた情報は、エンティティマネージャーファクトリに登録されている名前付きクエリには影響しないため、createNamedQuery または createNamedStoredProcedureQuery を呼び出してそのクエリから作成される後続のクエリオブジェクトには影響しません。

      同じ名前の名前付きクエリが以前にメタデータまたはこのメソッドを介して静的に定義されている場合、そのクエリ定義は置き換えられます。

      パラメーター:
      name - クエリの名前
      query - QueryTypedQuery、または StoredProcedureQuery
      導入:
      2.1
    • unwrap

      <T> T unwrap(ClassSE<T> cls)
      指定された型のオブジェクトを返して、プロバイダー固有の API へのアクセスを許可します。EntityManagerFactory のプロバイダ実装が指定された型をサポートしていない場合、PersistenceException がスローされます。
      パラメーター:
      cls - 返されるオブジェクトのクラス。これは通常、EntityManagerFactory を実装する基礎となるクラス、またはそれが実装するインターフェースのいずれかです。
      戻り値:
      指定されたクラスのインスタンス
      例外:
      PersistenceException - プロバイダーが指定された型をサポートしていない場合
      導入:
      2.1
    • addNamedEntityGraph

      <T> void addNamedEntityGraph(StringSE graphName, EntityGraph<T> entityGraph)
      指定された EntityGraph の名前付きコピーをこの EntityManagerFactory に追加します。指定された名前のエンティティグラフがすでに存在する場合は、置き換えられます。
      パラメーター:
      graphName - エンティティグラフの名前
      entityGraph - エンティティグラフ
      導入:
      2.1
    • getNamedQueries

      <R> MapSE<StringSE,TypedQueryReference<R>> getNamedQueries(ClassSE<R> resultType)
      クエリ名をキーとするマップ。結果の型が指定された Java 型に割り当てられるすべての名前付きクエリへの参照が含まれます。
      型パラメーター:
      R - クエリ結果の型に指定された上限
      パラメーター:
      resultType - すべてのクエリを意味する Object.class を含む任意の Java 型
      戻り値:
      クエリ名をキーとしたマップ
      導入:
      3.2
    • getNamedEntityGraphs

      <E> MapSE<StringSE,EntityGraph<? extends E>> getNamedEntityGraphs(ClassSE<E> entityType)
      グラフ名をキーとするマップ。エンティティ型が指定された Java 型に割り当て可能なすべての名前付きエンティティグラフを含みます。
      型パラメーター:
      E - エンティティグラフ型の指定された上限
      パラメーター:
      entityType - すべてのエンティティグラフを意味する Object.class を含む任意の Java 型
      戻り値:
      グラフ名をキーとしたマップ
      導入:
      3.2
    • runInTransaction

      void runInTransaction(ConsumerSE<EntityManager> work)
      アクティブなトランザクションを持つ新しいアプリケーション管理の EntityManager を作成し、指定された関数を実行して、その関数に EntityManager を渡します。

      永続化ユニットのトランザクション型が JTA で、呼び出し元にすでに関連付けられている JTA トランザクションがある場合、EntityManager はこの現在のトランザクションに関連付けられます。指定された関数が例外をスローした場合、JTA トランザクションはロールバックのマークが付けられ、例外が再スローされます。

      それ以外の場合、永続化ユニットのトランザクション型がリソースローカルである場合、または呼び出し元にすでに関連付けられている JTA トランザクションがない場合、EntityManager は新しいトランザクションに関連付けられます。指定された関数が例外をスローせずに戻った場合、このトランザクションはコミットされます。関数が例外をスローした場合、トランザクションはロールバックされ、例外が再スローされます。

      最後に、このメソッドが制御をクライアントに返す前に、EntityManager が閉じられます。

      パラメーター:
      work - トランザクションのスコープ内で実行される関数
      導入:
      3.2
    • callInTransaction

      <R> R callInTransaction(FunctionSE<EntityManager,R> work)
      アクティブなトランザクションを持つ新しいアプリケーション管理の EntityManager を作成し、指定された関数を呼び出して、その関数に EntityManager を渡します。

      永続化ユニットのトランザクション型が JTA で、呼び出し元にすでに関連付けられている JTA トランザクションがある場合、EntityManager はこの現在のトランザクションに関連付けられます。指定された関数が例外をスローせずに戻った場合、関数の結果が返されます。指定された関数が例外をスローした場合、JTA トランザクションはロールバックのマークが付けられ、例外が再スローされます。

      それ以外の場合、永続化ユニットのトランザクション型がリソースローカルである場合、または呼び出し元にすでに関連付けられている JTA トランザクションがない場合、EntityManager は新しいトランザクションに関連付けられます。指定された関数が例外をスローせずに戻った場合、このトランザクションはコミットされ、関数の結果が返されます。関数が例外をスローした場合、トランザクションはロールバックされ、例外が再スローされます。

      最後に、このメソッドが制御をクライアントに返す前に、EntityManager が閉じられます。

      パラメーター:
      work - トランザクションのスコープ内で呼び出される関数
      戻り値:
      指定された関数によって返される値
      導入:
      3.2