public abstract class AbstractEntityManagerFactoryBean extends ObjectSE implements FactoryBean<EntityManagerFactoryEE>, BeanClassLoaderAware, BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean, EntityManagerFactoryInfo, PersistenceExceptionTranslator, SerializableSE
EntityManagerFactoryEE インスタンスを作成する抽象 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) 指定された EntityManagerFactoryEE のプロキシを作成します。 |
EntityManagerEE | createNativeEntityManager(MapSE<?,?> properties) アプリケーションレベルの EntityManager ハンドルの背後にあるフレームワーク管理リソースとして使用されるネイティブ JPA EntityManager を作成します。 |
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 プロパティへの Map アクセスを永続性プロバイダーに渡すことを許可します。 |
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() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
protected void | postProcessEntityManager(EntityManagerEE rawEntityManager) アクティブに使用する前にネイティブ EntityManager を後処理するためのオプションのコールバック。 |
void | setBeanClassLoader(ClassLoaderSE classLoader)Bean class loaderSE を 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 構成の名前を指定します。 |
DataAccessException | translateExceptionIfPossible(RuntimeExceptionSE ex)Spring の PersistenceExceptionTranslationPostProcessor によって自動検出される PersistenceExceptionTranslator インターフェースの実装。 |
protected ObjectSE | writeReplace() |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEprotected final Log logger
public void setPersistenceProviderClass(ClassSE<? extends PersistenceProviderEE> persistenceProviderClass)
public void setPersistenceProvider(@Nullable PersistenceProviderEE persistenceProvider)
@Nullable public PersistenceProviderEE getPersistenceProvider()
EntityManagerFactoryInfoEntityManagerFactoryInfo の getPersistenceProvider null public void setPersistenceUnitName(@Nullable StringSE persistenceUnitName)
デフォルトは none で、デフォルトの EntityManagerFactory 構成を示します。あいまいな EntityManager 構成が見つかった場合、永続性プロバイダーは例外をスローします。
@Nullable public StringSE getPersistenceUnitName()
EntityManagerFactoryInfonull を返します。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()
Map アクセスを永続性プロバイダーに渡すことを許可します。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()
EntityManagerFactoryInfonull の戻り値は、自動検出が行われることが想定されていることを示しています。ターゲット EntityManager インスタンスに基づいているか、単にデフォルトで javax.persistence.EntityManager になっています。
EntityManagerFactoryInfo の getEntityManagerInterface public void setJpaDialect(@Nullable JpaDialect jpaDialect)
@Nullable public JpaDialect getJpaDialect()
EntityManagerFactoryInfonull を返します。EntityManagerFactoryInfo の getJpaDialect public void setJpaVendorAdapter(@Nullable JpaVendorAdapter jpaVendorAdapter)
@Nullable public JpaVendorAdapter getJpaVendorAdapter()
null を返します。public void setEntityManagerInitializer(ConsumerSE<EntityManagerEE> entityManagerInitializer)
EntityManagerFactory によって作成されたすべての EntityManager をカスタマイズするためのコールバックを指定します。 これは、JpaVendorAdapter -level postProcessEntityManager 実装の代替であり、アプリケーションの目的で便利なカスタマイズを可能にします。Hibernate フィルターの設定。
public void setBootstrapExecutor(@Nullable AsyncTaskExecutor bootstrapExecutor)
SimpleAsyncTaskExecutor。 次に、EntityManagerFactory の初期化がバックグラウンドブートストラップモードに切り替わり、JPA プロバイダーのブートストラップが完了するのを待つのではなく、注入のために EntityManagerFactory プロキシがすぐに返されます。ただし、EntityManagerFactory メソッドへの最初の実際の呼び出しは、JPA プロバイダーのブートストラップが完了するまでブロックされます。最大限のメリットを得るには、メタデータのイントロスペクションの目的であっても、関連する Bean の init メソッドでの初期の EntityManagerFactory 呼び出しを避けてください。
@Nullable public AsyncTaskExecutor getBootstrapExecutor()
public void setBeanClassLoader(ClassLoaderSE classLoader)
BeanClassLoaderAwareclass loaderSE を 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 は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationExceptionpublic 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 PersistenceExceptionEEInitializingBeanBeanFactoryAware、ApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean の afterPropertiesSet PersistenceExceptionEEprotected EntityManagerFactoryEE createEntityManagerFactoryProxy(@Nullable EntityManagerFactoryEE emf)
EntityManagerFactoryEE のプロキシを作成します。これは、アプリケーション管理の EntityManagerEE のトランザクション対応プロキシを返すことができるようにするためです。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()
EntityManagerFactoryInfoEntityManagerFactoryInfo の getNativeEntityManagerFactory null)public EntityManagerEE createNativeEntityManager(@Nullable MapSE<?,?> properties)
EntityManagerFactoryInfo これにより、JpaVendorAdapter.postProcessEntityManager(EntityManager) を考慮して、基盤となる native EntityManagerFactory からネイティブ EntityManager が公開されます。
protected void postProcessEntityManager(EntityManagerEE rawEntityManager)
デフォルトの実装は、利用可能な場合、JpaVendorAdapter.postProcessEntityManager(javax.persistence.EntityManager) に委譲します。
rawEntityManager - 後処理する EntityManagercreateNativeEntityManager(java.util.Map<?, ?>), JpaVendorAdapter.postProcessEntityManager(javax.persistence.EntityManager)@Nullable public PersistenceUnitInfoEE getPersistenceUnitInfo()
EntityManagerFactoryInfoEntityManagerFactoryInfo の getPersistenceUnitInfo null @Nullable public DataSourceSE getDataSource()
EntityManagerFactoryInfoEntityManagerFactoryInfo の getDataSource null @Nullable public EntityManagerFactoryEE getObject()
FactoryBean<EntityManagerFactoryEE> の getObject null にすることができます)FactoryBeanNotInitializedExceptionpublic ClassSE<? extends EntityManagerFactoryEE> getObjectType()
FactoryBeannull を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<EntityManagerFactoryEE> の getObjectType null ListableBeanFactory.getBeansOfType(java.lang.Class<T>)public boolean isSingleton()
FactoryBeanFactoryBean.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