クラス AbstractEntityManagerFactoryBean

java.lang.ObjectSE
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean
実装されたすべてのインターフェース:
SerializableSEAwareBeanClassLoaderAwareBeanFactoryAwareBeanNameAwareDisposableBeanFactoryBean<EntityManagerFactoryEE>InitializingBeanPersistenceExceptionTranslatorEntityManagerFactoryInfo
既知の直属サブクラス
LocalContainerEntityManagerFactoryBeanLocalEntityManagerFactoryBean

Spring アプリケーションコンテキスト内にローカル JPA EntityManagerFactoryEE インスタンスを作成する抽象 FactoryBean

さまざまな JPA ブートストラップ契約(スタンドアロンおよびコンテナー)間の共通機能をカプセル化します。

標準の JPA 構成規則と Spring のカスタマイズ可能な JpaVendorAdapter メカニズムのサポートを実装し、EntityManagerFactory のライフサイクルを制御します。

このクラスは、Spring の PersistenceExceptionTranslationPostProcessor によって自動検出される PersistenceExceptionTranslator インターフェースも実装し、ネイティブ例外を Spring DataAccessExceptions に AOP ベースで変換します。たとえば LocalEntityManagerFactoryBean は、PersistenceExceptionTranslationPostProcessor が自動的に JPA 例外を変換できるようにします。

導入:
2.0
作成者:
Juergen Hoeller, Rod Johnson
関連事項:
  • フィールドの詳細

    • logger

      protected final Log logger
      サブクラスで利用可能なロガー。
  • コンストラクターの詳細

    • AbstractEntityManagerFactoryBean

      public AbstractEntityManagerFactoryBean()
  • メソッドの詳細

    • setPersistenceProviderClass

      public void setPersistenceProviderClass(ClassSE<? extends PersistenceProviderEE> persistenceProviderClass)
      EntityManagerFactory の作成に使用する PersistenceProvider 実装クラスを設定します。指定されていない場合、永続性プロバイダーは JpaVendorAdapter(存在する場合)から取得されるか、スキャンによって(可能な限り)取得されます。
      関連事項:
    • setPersistenceProvider

      public void setPersistenceProvider(@Nullable PersistenceProviderEE persistenceProvider)
      EntityManagerFactory の作成に使用する PersistenceProvider インスタンスを設定します。指定しない場合、永続化プロバイダーは JpaVendorAdapter(存在する場合)から取得されるか、永続化ユニットデプロイ記述子によって(可能な限り)決定されます。
      関連事項:
    • getPersistenceProvider

      @Nullable public PersistenceProviderEE getPersistenceProvider()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      基になる EntityManagerFactory の作成に使用された基になる PersistenceProvider を返します。
      次で指定:
      インターフェース EntityManagerFactoryInfogetPersistenceProvider 
      戻り値:
      この EntityManagerFactory の作成に使用された PersistenceProvider、または EntityManagerFactory の構成に標準の JPA プロバイダー自動検出プロセスが使用された場合は null 
    • setPersistenceUnitName

      public void setPersistenceUnitName(@Nullable StringSE persistenceUnitName)
      EntityManagerFactory 構成の名前を指定します。

      デフォルトは none で、デフォルトの EntityManagerFactory 構成を示します。あいまいな EntityManager 構成が見つかった場合、永続性プロバイダーは例外をスローします。

      関連事項:
    • getPersistenceUnitName

      @Nullable public StringSE getPersistenceUnitName()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合は null を返します。

      getPersistenceUnitInfo() が null 以外を返す場合、getPersistenceUnitName() の結果は PersistenceUnitInfo.getPersistenceUnitName() によって返される値と等しくなければなりません。

      次で指定:
      インターフェース EntityManagerFactoryInfogetPersistenceUnitName 
      関連事項:
    • setJpaProperties

      public void setJpaProperties(PropertiesSE jpaProperties)
      Persistence.createEntityManagerFactory (存在する場合)に渡される JPA プロパティを指定します。

      文字列 "value" (PropertiesEditor で解析)または XML Bean 定義の "props" 要素を入力できます。

      関連事項:
    • setJpaPropertyMap

      public void setJpaPropertyMap(@Nullable MapSE<StringSE,?> jpaProperties)
      JPA プロパティをマップとして指定し、Persistence.createEntityManagerFactory (存在する場合)に渡されます。

      XML Bean 定義の「マップ」または "props" 要素を取り込むことができます。

      関連事項:
    • getJpaPropertyMap

      public MapSE<StringSE,ObjectSE> getJpaPropertyMap()
      特定のエントリを追加またはオーバーライドするオプションを使用して、JPA プロパティへの Map アクセスを永続性プロバイダーに渡すことを許可します。

      jpaPropertyMap[myKey] などを介してエントリを直接指定する場合に便利です。

    • setEntityManagerFactoryInterface

      public void setEntityManagerFactoryInterface(ClassSE<? extends EntityManagerFactoryEE> emfInterface)
      この EntityManagerFactory プロキシが実装することになっている(潜在的にベンダー固有の)EntityManagerFactory インターフェースを指定します。

      デフォルトは、特定の JpaVendorAdapter(存在する場合)から取得されるか、標準の jakarta.persistence.EntityManagerFactory インターフェースに設定されます。

      関連事項:
    • setEntityManagerInterface

      public void setEntityManagerInterface(@Nullable ClassSE<? extends EntityManagerEE> emInterface)
      このファクトリの EntityManagers が実装することになっている(潜在的にベンダー固有の)EntityManager インターフェースを指定します。

      デフォルトは、特定の JpaVendorAdapter(存在する場合)から取得されるか、標準の jakarta.persistence.EntityManager インターフェースに設定されます。

      関連事項:
    • getEntityManagerInterface

      @Nullable public ClassSE<? extends EntityManagerEE> getEntityManagerInterface()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      このファクトリの EntityManagers が実装する(潜在的にベンダー固有の)EntityManager インターフェースを返します。

      null の戻り値は、自動検出が行われることが想定されていることを示しています。ターゲット EntityManager インスタンスに基づいているか、単にデフォルトで jakarta.persistence.EntityManager になっています。

      次で指定:
      インターフェース EntityManagerFactoryInfogetEntityManagerInterface 
    • setJpaDialect

      public void setJpaDialect(@Nullable JpaDialect jpaDialect)
      この EntityManagerFactory に関連付けるベンダー固有の JpaDialect 実装を指定します。これは、EntityManagerFactoryInfo インターフェースを介して公開され、JpaDialect 機能を使用することを意図しているアクセサーによってデフォルトのダイアレクトとしてピックアップされます。
      関連事項:
    • getJpaDialect

      @Nullable public JpaDialect getJpaDialect()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      この EntityManagerFactory のベンダー固有の JpaDialect 実装、または不明の場合は null を返します。
      次で指定:
      インターフェース EntityManagerFactoryInfogetJpaDialect 
    • setJpaVendorAdapter

      public void setJpaVendorAdapter(@Nullable JpaVendorAdapter jpaVendorAdapter)
      必要に応じて、目的の JPA プロバイダーの JpaVendorAdapter 実装を指定します。これにより、この FactoryBean でローカルにオーバーライドされない限り、永続性プロバイダークラスや JpaDialect など、指定されたプロバイダーの適切なデフォルトが初期化されます。
    • getJpaVendorAdapter

      @Nullable public JpaVendorAdapter getJpaVendorAdapter()
      この EntityManagerFactory の JpaVendorAdapter 実装を返します。不明な場合は null を返します。
    • setEntityManagerInitializer

      public void setEntityManagerInitializer(ConsumerSE<EntityManagerEE> entityManagerInitializer)
      公開された EntityManagerFactory によって作成されたすべての EntityManager をカスタマイズするためのコールバックを指定します。

      これは、JpaVendorAdapter -level postProcessEntityManager 実装の代替であり、アプリケーションの目的で便利なカスタマイズを可能にします。Hibernate フィルターの設定。

      導入:
      5.3
      関連事項:
    • setBootstrapExecutor

      public void setBootstrapExecutor(@Nullable AsyncTaskExecutor bootstrapExecutor)
      バックグラウンドブートストラップ用の非同期エグゼキューターを指定します。SimpleAsyncTaskExecutor

      次に、EntityManagerFactory の初期化がバックグラウンドブートストラップモードに切り替わり、JPA プロバイダーのブートストラップが完了するのを待つのではなく、注入のために EntityManagerFactory プロキシがすぐに返されます。ただし、EntityManagerFactory メソッドへの最初の実際の呼び出しは、JPA プロバイダーのブートストラップが完了するまでブロックされます。最大限のメリットを得るには、メタデータのイントロスペクションの目的であっても、関連する Bean の init メソッドでの初期の EntityManagerFactory 呼び出しを避けてください。

      導入:
      4.3
    • getBootstrapExecutor

      @Nullable public AsyncTaskExecutor getBootstrapExecutor()
      バックグラウンドブートストラップの非同期エグゼキューターを返します(ある場合)。
      導入:
      4.3
    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoaderSE classLoader)
      インターフェースからコピーされた説明: BeanClassLoaderAware
      Bean class loaderSE を Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定、ただし InitializingBean's InitializingBean.afterPropertiesSet() メソッドやカスタム init-method などの初期化コールバックの前に呼び出さます。

      次で指定:
      インターフェース BeanClassLoaderAwaresetBeanClassLoader 
      パラメーター:
      classLoader - 所有クラスローダー
    • getBeanClassLoader

      public ClassLoaderSE getBeanClassLoader()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      アプリケーションの Bean がロードされる ClassLoader を返します。

      この ClassLoader でプロキシが生成されます。

      次で指定:
      インターフェース EntityManagerFactoryInfogetBeanClassLoader 
    • setBeanFactory

      public void setBeanFactory(BeanFactory beanFactory)
      インターフェースからコピーされた説明: BeanFactoryAware
      所有ファクトリを Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init-method などの初期化コールバックの前に呼び出されます。

      次で指定:
      インターフェース BeanFactoryAwaresetBeanFactory 
      パラメーター:
      beanFactory - 所有 BeanFactory(非 null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。
      関連事項:
    • setBeanName

      public void setBeanName(StringSE name)
      インターフェースからコピーされた説明: BeanNameAware
      この Bean を作成した Bean ファクトリで Bean の名前を設定します。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init メソッドなどの init コールバックの前に呼び出されます。

      次で指定:
      インターフェース BeanNameAwaresetBeanName 
      パラメーター:
      name - ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String) メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。
    • afterPropertiesSet

      public void afterPropertiesSet() throws PersistenceExceptionEE
      インターフェースからコピーされた説明: InitializingBean
      すべての Bean プロパティを設定し、BeanFactoryAwareApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。

      このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。

      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      例外:
      PersistenceExceptionEE
    • createEntityManagerFactoryProxy

      protected EntityManagerFactoryEE createEntityManagerFactoryProxy(@Nullable EntityManagerFactoryEE emf)
      指定された EntityManagerFactoryEE のプロキシを作成します。これは、アプリケーション管理の EntityManagerEE のトランザクション対応プロキシを返すことができるようにするためです。
      パラメーター:
      emf - 永続化プロバイダーによって返された EntityManagerFactory(すでに初期化されている場合)
      戻り値:
      EntityManagerFactory プロキシ
    • createNativeEntityManagerFactory

      protected abstract EntityManagerFactoryEE createNativeEntityManagerFactory() throws PersistenceExceptionEE
      サブクラスは、このメソッドを実装して、getObject() メソッドによって返される EntityManagerFactory を作成する必要があります。
      戻り値:
      この FactoryBean によって返される EntityManagerFactory インスタンス
      例外:
      PersistenceExceptionEE - EntityManager を作成できない場合
    • translateExceptionIfPossible

      @Nullable public DataAccessException translateExceptionIfPossible(RuntimeExceptionSE ex)
      Spring の PersistenceExceptionTranslationPostProcessor によって自動検出される PersistenceExceptionTranslator インターフェースの実装。

      可能であれば、ダイアレクトの変換を使用します。そうでない場合、標準の JPA 例外変換にフォールバックします。

      次で指定:
      インターフェース PersistenceExceptionTranslatortranslateExceptionIfPossible 
      パラメーター:
      ex - 変換する RuntimeException
      戻り値:
      対応する DataAccessException (または、例外を変換できなかった場合は null。この場合、実際の永続性の問題ではなく、ユーザーコードが原因である可能性があります。)
      関連事項:
    • getNativeEntityManagerFactory

      public EntityManagerFactoryEE getNativeEntityManagerFactory()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      元の EntityManagerFactory をそのまま返します。
      次で指定:
      インターフェース EntityManagerFactoryInfogetNativeEntityManagerFactory 
      戻り値:
      飾り気のない EntityManagerFactory (非 null)
    • createNativeEntityManager

      public EntityManagerEE createNativeEntityManager(@Nullable MapSE<?,?> properties)
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      アプリケーションレベルの EntityManager ハンドルの背後にあるフレームワーク管理リソースとして使用されるネイティブ JPA EntityManager を作成します。

      これにより、JpaVendorAdapter.postProcessEntityManager(EntityManager) を考慮して、基盤となる native EntityManagerFactory からネイティブ EntityManager が公開されます。

      次で指定:
      インターフェース EntityManagerFactoryInfocreateNativeEntityManager 
      関連事項:
    • postProcessEntityManager

      protected void postProcessEntityManager(EntityManagerEE rawEntityManager)
      アクティブに使用する前にネイティブ EntityManager を後処理するためのオプションのコールバック。

      デフォルトの実装は、利用可能な場合、JpaVendorAdapter.postProcessEntityManager(jakarta.persistence.EntityManager) に委譲します。

      パラメーター:
      rawEntityManager - 後処理する EntityManager
      導入:
      5.3
      関連事項:
    • getPersistenceUnitInfo

      @Nullable public PersistenceUnitInfoEE getPersistenceUnitInfo()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。
      次で指定:
      インターフェース EntityManagerFactoryInfogetPersistenceUnitInfo 
      戻り値:
      この EntityManagerFactory の作成に使用された PersistenceUnitInfo、またはコンテナー内契約が EntityManagerFactory の構成に使用されなかった場合は null 
    • getDataSource

      @Nullable public DataSourceSE getDataSource()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。
      次で指定:
      インターフェース EntityManagerFactoryInfogetDataSource 
      戻り値:
      JDBC DataSource、または不明の場合は null 
    • getObject

      @Nullable public EntityManagerFactoryEE getObject()
      シングルトン EntityManagerFactory を返します。
      次で指定:
      インターフェース FactoryBean<EntityManagerFactoryEE>getObject 
      戻り値:
      Bean のインスタンス (null にすることができます)
      関連事項:
    • getObjectType

      public ClassSE<? extends EntityManagerFactoryEE> getObjectType()
      インターフェースからコピーされた説明: FactoryBean
      この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。

      これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。

      シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。

      このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。

      注意 : オートワイヤーは、ここで null を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。

      次で指定:
      インターフェース FactoryBean<EntityManagerFactoryEE>getObjectType 
      戻り値:
      この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は null 
      関連事項:
    • isSingleton

      public boolean isSingleton()
      インターフェースからコピーされた説明: FactoryBean
      このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?

      注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject() から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true を返さないでください。

      FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。

      注意 false を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean インターフェースの実装は、SmartFactoryBean.isPrototype() メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean 実装は、isSingleton() 実装が false を返す場合、常に独立したインスタンスを返すと単純に想定されます。

      FactoryBean は通常シングルトンインスタンスを管理するため、デフォルトの実装は true を返します。

      次で指定:
      インターフェース FactoryBean<EntityManagerFactoryEE>isSingleton 
      戻り値:
      公開されたオブジェクトがシングルトンかどうか
      関連事項:
    • destroy

      public void destroy()
      Bean 提供時のシャットダウンで EntityManagerFactory を閉じます。
      次で指定:
      インターフェース DisposableBeandestroy 
    • writeReplace

      protected ObjectSE writeReplace() throws ObjectStreamExceptionSE
      例外:
      ObjectStreamExceptionSE