クラス AbstractEntityManagerFactoryBean
- 実装されたすべてのインターフェース:
SerializableSE
、Aware
、BeanClassLoaderAware
、BeanFactoryAware
、BeanNameAware
、DisposableBean
、FactoryBean<EntityManagerFactoryEE>
、InitializingBean
、PersistenceExceptionTranslator
、EntityManagerFactoryInfo
EntityManagerFactory
EE インスタンスを作成する抽象 FactoryBean
。さまざまな JPA ブートストラップ契約(スタンドアロンおよびコンテナー)間の共通機能をカプセル化します。
標準の JPA 構成規則と Spring のカスタマイズ可能な JpaVendorAdapter
メカニズムのサポートを実装し、EntityManagerFactory のライフサイクルを制御します。
このクラスは、Spring の PersistenceExceptionTranslationPostProcessor
によって自動検出される PersistenceExceptionTranslator
インターフェースも実装し、ネイティブ例外を Spring DataAccessExceptions に AOP ベースで変換します。たとえば LocalEntityManagerFactoryBean は、PersistenceExceptionTranslationPostProcessor が自動的に JPA 例外を変換できるようにします。
- 導入:
- 2.0
- 作成者:
- Juergen Hoeller, Rod Johnson
- 関連事項:
フィールドサマリー
インターフェース org.springframework.beans.factory.FactoryBean から継承されたフィールド
OBJECT_TYPE_ATTRIBUTE
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明void
protected EntityManagerFactoryEE
指定されたEntityManagerFactory
EE のプロキシを作成します。createNativeEntityManager
(MapSE<?, ?> properties) アプリケーションレベルの EntityManager ハンドルの背後にあるフレームワーク管理リソースとして使用されるネイティブ JPA EntityManager を作成します。protected abstract EntityManagerFactoryEE
サブクラスは、このメソッドを実装して、getObject()
メソッドによって返される EntityManagerFactory を作成する必要があります。void
destroy()
Bean 提供時のシャットダウンで EntityManagerFactory を閉じます。アプリケーションの Bean がロードされる ClassLoader を返します。バックグラウンドブートストラップの非同期エグゼキューターを返します(ある場合)。この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。ClassSE<? extends EntityManagerEE>
このファクトリの EntityManagers が実装する(潜在的にベンダー固有の)EntityManager インターフェースを返します。この EntityManagerFactory のベンダー固有の JpaDialect 実装、または不明の場合はnull
を返します。特定のエントリを追加またはオーバーライドするオプションを使用して、JPA プロパティへのMap
アクセスを永続性プロバイダーに渡すことを許可します。この EntityManagerFactory の JpaVendorAdapter 実装を返します。不明な場合はnull
を返します。元の EntityManagerFactory をそのまま返します。シングルトン EntityManagerFactory を返します。ClassSE<? extends EntityManagerFactoryEE>
この FactoryBean が作成するオブジェクトの型、または事前に不明な場合はnull
を返します。基になる EntityManagerFactory の作成に使用された基になる PersistenceProvider を返します。コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合はnull
を返します。boolean
このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?protected void
postProcessEntityManager
(EntityManagerEE rawEntityManager) アクティブに使用する前にネイティブ EntityManager を後処理するためのオプションのコールバック。void
setBeanClassLoader
(ClassLoaderSE classLoader) Beanclass loader
SE を Bean インスタンスに提供するコールバック。void
setBeanFactory
(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。void
setBeanName
(StringSE name) この Bean を作成した Bean ファクトリで Bean の名前を設定します。void
setBootstrapExecutor
(AsyncTaskExecutor bootstrapExecutor) バックグラウンドブートストラップ用の非同期エグゼキューターを指定します。void
setEntityManagerFactoryInterface
(ClassSE<? extends EntityManagerFactoryEE> emfInterface) この EntityManagerFactory プロキシが実装することになっている(潜在的にベンダー固有の)EntityManagerFactory インターフェースを指定します。void
setEntityManagerInitializer
(ConsumerSE<EntityManagerEE> entityManagerInitializer) 公開されたEntityManagerFactory
によって作成されたすべてのEntityManager
をカスタマイズするためのコールバックを指定します。void
setEntityManagerInterface
(ClassSE<? extends EntityManagerEE> emInterface) このファクトリの EntityManagers が実装することになっている(潜在的にベンダー固有の)EntityManager インターフェースを指定します。void
setJpaDialect
(JpaDialect jpaDialect) この EntityManagerFactory に関連付けるベンダー固有の JpaDialect 実装を指定します。void
setJpaProperties
(PropertiesSE jpaProperties) Persistence.createEntityManagerFactory
(存在する場合)に渡される JPA プロパティを指定します。void
setJpaPropertyMap
(MapSE<StringSE, ?> jpaProperties) JPA プロパティをマップとして指定し、Persistence.createEntityManagerFactory
(存在する場合)に渡されます。void
setJpaVendorAdapter
(JpaVendorAdapter jpaVendorAdapter) 必要に応じて、目的の JPA プロバイダーの JpaVendorAdapter 実装を指定します。void
setPersistenceProvider
(PersistenceProviderEE persistenceProvider) EntityManagerFactory の作成に使用する PersistenceProvider インスタンスを設定します。void
setPersistenceProviderClass
(ClassSE<? extends PersistenceProviderEE> persistenceProviderClass) EntityManagerFactory の作成に使用する PersistenceProvider 実装クラスを設定します。void
setPersistenceUnitName
(StringSE persistenceUnitName) EntityManagerFactory 構成の名前を指定します。Spring の PersistenceExceptionTranslationPostProcessor によって自動検出される PersistenceExceptionTranslator インターフェースの実装。protected ObjectSE
フィールドの詳細
logger
サブクラスで利用可能なロガー。
コンストラクターの詳細
AbstractEntityManagerFactoryBean
public AbstractEntityManagerFactoryBean()
メソッドの詳細
setPersistenceProviderClass
public void setPersistenceProviderClass(ClassSE<? extends PersistenceProviderEE> persistenceProviderClass) EntityManagerFactory の作成に使用する PersistenceProvider 実装クラスを設定します。指定されていない場合、永続性プロバイダーは JpaVendorAdapter(存在する場合)から取得されるか、スキャンによって(可能な限り)取得されます。setPersistenceProvider
EntityManagerFactory の作成に使用する PersistenceProvider インスタンスを設定します。指定しない場合、永続化プロバイダーは JpaVendorAdapter(存在する場合)から取得されるか、永続化ユニットデプロイ記述子によって(可能な限り)決定されます。getPersistenceProvider
インターフェースからコピーされた説明:EntityManagerFactoryInfo
基になる EntityManagerFactory の作成に使用された基になる PersistenceProvider を返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetPersistenceProvider
- 戻り値:
- この EntityManagerFactory の作成に使用された PersistenceProvider、または EntityManagerFactory の構成に標準の JPA プロバイダー自動検出プロセスが使用された場合は
null
setPersistenceUnitName
EntityManagerFactory 構成の名前を指定します。デフォルトは none で、デフォルトの EntityManagerFactory 構成を示します。あいまいな EntityManager 構成が見つかった場合、永続性プロバイダーは例外をスローします。
getPersistenceUnitName
インターフェースからコピーされた説明:EntityManagerFactoryInfo
この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合はnull
を返します。getPersistenceUnitInfo()
が null 以外を返す場合、getPersistenceUnitName()
の結果はPersistenceUnitInfo.getPersistenceUnitName()
によって返される値と等しくなければなりません。setJpaProperties
Persistence.createEntityManagerFactory
(存在する場合)に渡される JPA プロパティを指定します。文字列 "value" (PropertiesEditor で解析)または XML Bean 定義の "props" 要素を入力できます。
setJpaPropertyMap
JPA プロパティをマップとして指定し、Persistence.createEntityManagerFactory
(存在する場合)に渡されます。XML Bean 定義の「マップ」または "props" 要素を取り込むことができます。
getJpaPropertyMap
特定のエントリを追加またはオーバーライドするオプションを使用して、JPA プロパティへのMap
アクセスを永続性プロバイダーに渡すことを許可します。jpaPropertyMap[myKey]
などを介してエントリを直接指定する場合に便利です。setEntityManagerFactoryInterface
public void setEntityManagerFactoryInterface(ClassSE<? extends EntityManagerFactoryEE> emfInterface) この EntityManagerFactory プロキシが実装することになっている(潜在的にベンダー固有の)EntityManagerFactory インターフェースを指定します。デフォルトは、特定の JpaVendorAdapter(存在する場合)から取得されるか、標準の
jakarta.persistence.EntityManagerFactory
インターフェースに設定されます。setEntityManagerInterface
このファクトリの EntityManagers が実装することになっている(潜在的にベンダー固有の)EntityManager インターフェースを指定します。デフォルトは、特定の JpaVendorAdapter(存在する場合)から取得されるか、標準の
jakarta.persistence.EntityManager
インターフェースに設定されます。getEntityManagerInterface
インターフェースからコピーされた説明:EntityManagerFactoryInfo
このファクトリの EntityManagers が実装する(潜在的にベンダー固有の)EntityManager インターフェースを返します。null
の戻り値は、自動検出が行われることが想定されていることを示しています。ターゲットEntityManager
インスタンスに基づいているか、単にデフォルトでjakarta.persistence.EntityManager
になっています。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetEntityManagerInterface
setJpaDialect
この EntityManagerFactory に関連付けるベンダー固有の JpaDialect 実装を指定します。これは、EntityManagerFactoryInfo インターフェースを介して公開され、JpaDialect 機能を使用することを意図しているアクセサーによってデフォルトのダイアレクトとしてピックアップされます。getJpaDialect
インターフェースからコピーされた説明:EntityManagerFactoryInfo
この EntityManagerFactory のベンダー固有の JpaDialect 実装、または不明の場合はnull
を返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetJpaDialect
setJpaVendorAdapter
必要に応じて、目的の JPA プロバイダーの JpaVendorAdapter 実装を指定します。これにより、この FactoryBean でローカルにオーバーライドされない限り、永続性プロバイダークラスや JpaDialect など、指定されたプロバイダーの適切なデフォルトが初期化されます。getJpaVendorAdapter
この EntityManagerFactory の JpaVendorAdapter 実装を返します。不明な場合はnull
を返します。setEntityManagerInitializer
公開されたEntityManagerFactory
によって作成されたすべてのEntityManager
をカスタマイズするためのコールバックを指定します。これは、
JpaVendorAdapter
-levelpostProcessEntityManager
実装の代替であり、アプリケーションの目的で便利なカスタマイズを可能にします。Hibernate フィルターの設定。setBootstrapExecutor
バックグラウンドブートストラップ用の非同期エグゼキューターを指定します。SimpleAsyncTaskExecutor
。次に、
EntityManagerFactory
の初期化がバックグラウンドブートストラップモードに切り替わり、JPA プロバイダーのブートストラップが完了するのを待つのではなく、注入のためにEntityManagerFactory
プロキシがすぐに返されます。ただし、EntityManagerFactory
メソッドへの最初の実際の呼び出しは、JPA プロバイダーのブートストラップが完了するまでブロックされます。最大限のメリットを得るには、メタデータのイントロスペクションの目的であっても、関連する Bean の init メソッドでの初期のEntityManagerFactory
呼び出しを避けてください。- 導入:
- 4.3
getBootstrapExecutor
バックグラウンドブートストラップの非同期エグゼキューターを返します(ある場合)。- 導入:
- 4.3
setBeanClassLoader
インターフェースからコピーされた説明:BeanClassLoaderAware
Beanclass loader
SE を Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean's
InitializingBean.afterPropertiesSet()
メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanClassLoaderAware
のsetBeanClassLoader
- パラメーター:
classLoader
- 所有クラスローダー
getBeanClassLoader
インターフェースからコピーされた説明:EntityManagerFactoryInfo
アプリケーションの Bean がロードされる ClassLoader を返します。この ClassLoader でプロキシが生成されます。
- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetBeanClassLoader
setBeanFactory
インターフェースからコピーされた説明:BeanFactoryAware
所有ファクトリを Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanFactoryAware
のsetBeanFactory
- パラメーター:
beanFactory
- 所有 BeanFactory(非null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。- 関連事項:
setBeanName
インターフェースからコピーされた説明:BeanNameAware
この Bean を作成した Bean ファクトリで Bean の名前を設定します。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanNameAware
のsetBeanName
- パラメーター:
name
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。
afterPropertiesSet
インターフェースからコピーされた説明:InitializingBean
すべての Bean プロパティを設定し、BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
- 次で指定:
- インターフェース
InitializingBean
のafterPropertiesSet
- 例外:
PersistenceExceptionEE
createEntityManagerFactoryProxy
protected EntityManagerFactoryEE createEntityManagerFactoryProxy(@Nullable EntityManagerFactoryEE emf) 指定されたEntityManagerFactory
EE のプロキシを作成します。これは、アプリケーション管理のEntityManager
EE のトランザクション対応プロキシを返すことができるようにするためです。- パラメーター:
emf
- 永続化プロバイダーによって返された EntityManagerFactory(すでに初期化されている場合)- 戻り値:
- EntityManagerFactory プロキシ
createNativeEntityManagerFactory
protected abstract EntityManagerFactoryEE createNativeEntityManagerFactory() throws PersistenceExceptionEEサブクラスは、このメソッドを実装して、getObject()
メソッドによって返される EntityManagerFactory を作成する必要があります。- 戻り値:
- この FactoryBean によって返される EntityManagerFactory インスタンス
- 例外:
PersistenceExceptionEE
- EntityManager を作成できない場合
translateExceptionIfPossible
Spring の PersistenceExceptionTranslationPostProcessor によって自動検出される PersistenceExceptionTranslator インターフェースの実装。可能であれば、ダイアレクトの変換を使用します。そうでない場合、標準の JPA 例外変換にフォールバックします。
- 次で指定:
- インターフェース
PersistenceExceptionTranslator
のtranslateExceptionIfPossible
- パラメーター:
ex
- 変換する RuntimeException- 戻り値:
- 対応する DataAccessException (または、例外を変換できなかった場合は
null
。この場合、実際の永続性の問題ではなく、ユーザーコードが原因である可能性があります。) - 関連事項:
getNativeEntityManagerFactory
インターフェースからコピーされた説明:EntityManagerFactoryInfo
元の EntityManagerFactory をそのまま返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetNativeEntityManagerFactory
- 戻り値:
- 飾り気のない EntityManagerFactory (非
null
)
createNativeEntityManager
インターフェースからコピーされた説明:EntityManagerFactoryInfo
アプリケーションレベルの EntityManager ハンドルの背後にあるフレームワーク管理リソースとして使用されるネイティブ JPA EntityManager を作成します。これにより、
JpaVendorAdapter.postProcessEntityManager(EntityManager)
を考慮して、基盤となるnative EntityManagerFactory
からネイティブEntityManager
が公開されます。postProcessEntityManager
アクティブに使用する前にネイティブ EntityManager を後処理するためのオプションのコールバック。デフォルトの実装は、利用可能な場合、
JpaVendorAdapter.postProcessEntityManager(jakarta.persistence.EntityManager)
に委譲します。- パラメーター:
rawEntityManager
- 後処理する EntityManager- 導入:
- 5.3
- 関連事項:
getPersistenceUnitInfo
インターフェースからコピーされた説明:EntityManagerFactoryInfo
コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetPersistenceUnitInfo
- 戻り値:
- この EntityManagerFactory の作成に使用された PersistenceUnitInfo、またはコンテナー内契約が EntityManagerFactory の構成に使用されなかった場合は
null
getDataSource
インターフェースからコピーされた説明:EntityManagerFactoryInfo
この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetDataSource
- 戻り値:
- JDBC DataSource、または不明の場合は
null
getObject
シングルトン EntityManagerFactory を返します。- 次で指定:
- インターフェース
FactoryBean<EntityManagerFactoryEE>
のgetObject
- 戻り値:
- Bean のインスタンス (
null
にすることができます) - 関連事項:
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 を閉じます。- 次で指定:
- インターフェース
DisposableBean
のdestroy
writeReplace