public abstract class AbstractEntityManagerFactoryBean extends ObjectSE implements FactoryBean<EntityManagerFactoryEE>, BeanClassLoaderAware, BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean, EntityManagerFactoryInfo, PersistenceExceptionTranslator, SerializableSE
EntityManagerFactory
EE インスタンスを作成する抽象 FactoryBean
。さまざまな JPA ブートストラップ契約(スタンドアロンおよびコンテナー)間の共通機能をカプセル化します。
標準の JPA 構成規則と Spring のカスタマイズ可能な JpaVendorAdapter
メカニズムのサポートを実装し、EntityManagerFactory のライフサイクルを制御します。
このクラスは、Spring の PersistenceExceptionTranslationPostProcessor
によって自動検出される PersistenceExceptionTranslator
インターフェースも実装し、ネイティブ例外を Spring DataAccessExceptions に AOP ベースで変換します。たとえば LocalEntityManagerFactoryBean は、PersistenceExceptionTranslationPostProcessor が自動的に JPA 例外を変換できるようにします。
LocalEntityManagerFactoryBean
, LocalContainerEntityManagerFactoryBean
, 直列化された形式 修飾子と型 | フィールドと説明 |
---|---|
protected Log | logger サブクラスで利用可能なロガー。 |
OBJECT_TYPE_ATTRIBUTE
コンストラクターと説明 |
---|
AbstractEntityManagerFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
protected EntityManagerFactoryEE | createEntityManagerFactoryProxy(EntityManagerFactoryEE emf) 指定された EntityManagerFactory EE のプロキシを作成します。 |
protected abstract EntityManagerFactoryEE | createNativeEntityManagerFactory() サブクラスは、このメソッドを実装して、 getObject() メソッドによって返される EntityManagerFactory を作成する必要があります。 |
void | destroy() Bean 提供時のシャットダウンで EntityManagerFactory を閉じます。 |
ClassLoaderSE | getBeanClassLoader() アプリケーションの Bean がロードされる ClassLoader を返します。 |
AsyncTaskExecutor | getBootstrapExecutor() バックグラウンドブートストラップの非同期エグゼキューターを返します(ある場合)。 |
DataSourceSE | getDataSource() この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。 |
ClassSE<? extends EntityManagerEE> | getEntityManagerInterface() このファクトリの EntityManagers が実装する(潜在的にベンダー固有の)EntityManager インターフェースを返します。 |
JpaDialect | getJpaDialect() この EntityManagerFactory のベンダー固有の JpaDialect 実装、または不明の場合は null を返します。 |
MapSE<StringSE, ObjectSE> | getJpaPropertyMap() 特定のエントリを追加または上書きするオプションを使用して、JPA プロパティへのマップアクセスを永続性プロバイダーに渡すことができます。 |
JpaVendorAdapter | getJpaVendorAdapter() この EntityManagerFactory の JpaVendorAdapter 実装を返します。不明な場合は null を返します。 |
EntityManagerFactoryEE | getNativeEntityManagerFactory() 元の EntityManagerFactory をそのまま返します。 |
EntityManagerFactoryEE | getObject() シングルトン EntityManagerFactory を返します。 |
ClassSE<? extends EntityManagerFactoryEE> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
PersistenceProviderEE | getPersistenceProvider() 基になる EntityManagerFactory の作成に使用された基になる PersistenceProvider を返します。 |
PersistenceUnitInfoEE | getPersistenceUnitInfo() コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。 |
StringSE | getPersistenceUnitName() この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合は null を返します。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
void | setBeanClassLoader(ClassLoaderSE classLoader) Bean class 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 | 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 構成の名前を指定します。 |
DataAccessException | translateExceptionIfPossible(RuntimeExceptionSE ex) Spring の PersistenceExceptionTranslationPostProcessor によって自動検出される PersistenceExceptionTranslator インターフェースの実装。 |
protected ObjectSE | writeReplace() |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
protected final Log logger
public void setPersistenceProviderClass(ClassSE<? extends PersistenceProviderEE> persistenceProviderClass)
public void setPersistenceProvider(@Nullable PersistenceProviderEE persistenceProvider)
@Nullable public PersistenceProviderEE getPersistenceProvider()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getPersistenceProvider
null
public void setPersistenceUnitName(@Nullable StringSE persistenceUnitName)
デフォルトは none で、デフォルトの EntityManagerFactory 構成を示します。あいまいな EntityManager 構成が見つかった場合、永続性プロバイダーは例外をスローします。
@Nullable public StringSE getPersistenceUnitName()
EntityManagerFactoryInfo
null
を返します。getPersistenceUnitInfo()
が null 以外を返す場合、getPersistenceUnitName()
の結果は PersistenceUnitInfo.getPersistenceUnitName()
によって返される値と等しくなければなりません。
public void setJpaProperties(PropertiesSE jpaProperties)
Persistence.createEntityManagerFactory
(存在する場合)に渡される JPA プロパティを指定します。文字列 "value" (PropertiesEditor で解析)または XML Bean 定義の "props" 要素を入力できます。
public void setJpaPropertyMap(@Nullable MapSE<StringSE,?> jpaProperties)
Persistence.createEntityManagerFactory
(存在する場合)に渡されます。XML Bean 定義の「マップ」または "props" 要素を取り込むことができます。
public MapSE<StringSE,ObjectSE> getJpaPropertyMap()
"jpaPropertyMap [myKey]" などを介して、エントリを直接指定するのに便利です。
public void setEntityManagerFactoryInterface(ClassSE<? extends EntityManagerFactoryEE> emfInterface)
デフォルトは、特定の JpaVendorAdapter(存在する場合)から取得されるか、標準の javax.persistence.EntityManagerFactory
インターフェースに設定されます。
public void setEntityManagerInterface(@Nullable ClassSE<? extends EntityManagerEE> emInterface)
デフォルトは、特定の JpaVendorAdapter(存在する場合)から取得されるか、標準の javax.persistence.EntityManager
インターフェースに設定されます。
@Nullable public ClassSE<? extends EntityManagerEE> getEntityManagerInterface()
EntityManagerFactoryInfo
null
の戻り値は、自動検出が行われることが想定されていることを示しています。ターゲット EntityManager
インスタンスに基づいているか、単にデフォルトで javax.persistence.EntityManager
になっています。
EntityManagerFactoryInfo
の getEntityManagerInterface
public void setJpaDialect(@Nullable JpaDialect jpaDialect)
@Nullable public JpaDialect getJpaDialect()
EntityManagerFactoryInfo
null
を返します。EntityManagerFactoryInfo
の getJpaDialect
public void setJpaVendorAdapter(@Nullable JpaVendorAdapter jpaVendorAdapter)
@Nullable public JpaVendorAdapter getJpaVendorAdapter()
null
を返します。public void setBootstrapExecutor(@Nullable AsyncTaskExecutor bootstrapExecutor)
SimpleAsyncTaskExecutor
。 次に、EntityManagerFactory
の初期化がバックグラウンドブートストラップモードに切り替わり、JPA プロバイダーのブートストラップが完了するのを待つのではなく、注入のために EntityManagerFactory
プロキシがすぐに返されます。ただし、EntityManagerFactory
メソッドへの最初の実際の呼び出しは、JPA プロバイダーのブートストラップが完了するまでブロックされます。最大限のメリットを得るには、メタデータのイントロスペクションの目的であっても、関連する Bean の init メソッドでの初期の EntityManagerFactory
呼び出しを避けてください。
@Nullable public AsyncTaskExecutor getBootstrapExecutor()
public void setBeanClassLoader(ClassLoaderSE classLoader)
BeanClassLoaderAware
class loader
SE を Bean インスタンスに提供するコールバック。 通常の Bean プロパティの設定後、ただし InitializingBean's
InitializingBean.afterPropertiesSet()
メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanClassLoaderAware
の setBeanClassLoader
classLoader
- 所有クラスローダー public ClassLoaderSE getBeanClassLoader()
EntityManagerFactoryInfo
この ClassLoader でプロキシが生成されます。
EntityManagerFactoryInfo
の getBeanClassLoader
public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanFactoryAware
の setBeanFactory
beanFactory
- 所有 BeanFactory(非 null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationException
public void setBeanName(StringSE name)
BeanNameAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。
BeanNameAware
の setBeanName
name
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。public void afterPropertiesSet() throws PersistenceExceptionEE
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
PersistenceExceptionEE
protected EntityManagerFactoryEE createEntityManagerFactoryProxy(@Nullable EntityManagerFactoryEE emf)
EntityManagerFactory
EE のプロキシを作成します。これは、アプリケーション管理の EntityManager
EE のトランザクション対応プロキシを返すことができるようにするためです。emf
- 永続化プロバイダーによって返された EntityManagerFactory(すでに初期化されている場合)protected abstract EntityManagerFactoryEE createNativeEntityManagerFactory() throws PersistenceExceptionEE
getObject()
メソッドによって返される EntityManagerFactory を作成する必要があります。PersistenceExceptionEE
- EntityManager を作成できない場合 @Nullable public DataAccessException translateExceptionIfPossible(RuntimeExceptionSE ex)
可能であれば、ダイアレクトの変換を使用します。そうでない場合、標準の JPA 例外変換にフォールバックします。
PersistenceExceptionTranslator
の translateExceptionIfPossible
ex
- 変換する RuntimeExceptionnull
。この場合、実際の永続性の問題ではなく、ユーザーコードが原因である可能性があります。)PersistenceExceptionTranslationPostProcessor
, PersistenceExceptionTranslator.translateExceptionIfPossible(java.lang.RuntimeException)
, EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(java.lang.RuntimeException)
public EntityManagerFactoryEE getNativeEntityManagerFactory()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getNativeEntityManagerFactory
null
)@Nullable public PersistenceUnitInfoEE getPersistenceUnitInfo()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getPersistenceUnitInfo
null
@Nullable public DataSourceSE getDataSource()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getDataSource
null
@Nullable public EntityManagerFactoryEE getObject()
FactoryBean<EntityManagerFactoryEE>
の getObject
null
にすることができます)FactoryBeanNotInitializedException
public ClassSE<? extends EntityManagerFactoryEE> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<EntityManagerFactoryEE>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
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
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()
public void destroy()
DisposableBean
の destroy
protected ObjectSE writeReplace() throws ObjectStreamExceptionSE