クラス LocalContainerEntityManagerFactoryBean
- 実装されたすべてのインターフェース:
SerializableSE
、Aware
、BeanClassLoaderAware
、BeanFactoryAware
、BeanNameAware
、DisposableBean
、FactoryBean<EntityManagerFactoryEE>
、InitializingBean
、SmartInitializingSingleton
、ResourceLoaderAware
、LoadTimeWeaverAware
、PersistenceExceptionTranslator
、EntityManagerFactoryInfo
EntityManagerFactory
EE を作成する FactoryBean
。これは、Spring アプリケーションコンテキストで共有 JPA EntityManagerFactory をセットアップする最も強力な方法です。EntityManagerFactory は、依存性注入を介して JPA ベースの DAO に渡すことができます。JNDI ルックアップまたは LocalEntityManagerFactoryBean
定義への切り替えは設定の問題であることに注意してください! LocalEntityManagerFactoryBean
と同様に、構成設定は通常、一般的な JPA 構成規約に従って、クラスパスにある META-INF/persistence.xml
構成ファイルから読み込まれます。ただし、この FactoryBean は、persistence.xml
ファイルの場所をオーバーライドしたり、リンク先の JDBC DataSources を指定したりできるなど、より柔軟性があります。さらに、特別な VM に結び付けられるのではなく、Spring の LoadTimeWeaver
抽象化によるプラグ可能なクラスインストルメンテーションを可能にします。JVM の起動時に指定されたエージェント。
内部的には、この FactoryBean は persistence.xml
ファイル自体を解析し、対応する PersistenceUnitInfo
EE オブジェクト(JDBC DataSources や Spring LoadTimeWeaver などの追加の構成をマージしたもの)を作成して、選択した JPA PersistenceProvider
EE に渡します。これは、標準 JPA コンテナー契約を完全にサポートするローカル JPA コンテナーに対応します。
公開された EntityManagerFactory オブジェクトは、PersistenceProvider によって返される基礎となるネイティブ EntityManagerFactory のすべてのインターフェースと、この FactoryBean によって組み立てられた追加のメタデータを公開する EntityManagerFactoryInfo
インターフェースを実装します。
- 導入:
- 2.0
- 作成者:
- Juergen Hoeller, Rod Johnson
- 関連事項:
setPersistenceXmlLocation(java.lang.String)
AbstractEntityManagerFactoryBean.setJpaProperties(java.util.Properties)
AbstractEntityManagerFactoryBean.setJpaVendorAdapter(org.springframework.orm.jpa.JpaVendorAdapter)
setLoadTimeWeaver(org.springframework.instrument.classloading.LoadTimeWeaver)
setDataSource(javax.sql.DataSource)
EntityManagerFactoryInfo
LocalEntityManagerFactoryBean
SharedEntityManagerBean
PersistenceProvider.createContainerEntityManagerFactory(jakarta.persistence.spi.PersistenceUnitInfo, java.util.Map)
- 直列化された形式
フィールドサマリー
クラス org.springframework.orm.jpa.AbstractEntityManagerFactoryBean から継承されたフィールド
logger
インターフェース org.springframework.beans.factory.FactoryBean から継承されたフィールド
OBJECT_TYPE_ATTRIBUTE
コンストラクターのサマリー
方法の概要
修飾子と型メソッド説明void
protected EntityManagerFactoryEE
サブクラスは、このメソッドを実装して、getObject()
メソッドによって返される EntityManagerFactory を作成する必要があります。protected PersistenceUnitInfoEE
determinePersistenceUnitInfo
(PersistenceUnitManager persistenceUnitManager) この Bean によって作成された EntityManagerFactory に使用する PersistenceUnitInfo を決定します。この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合はnull
を返します。protected void
サブクラスが PersistenceProvider を介して作成した後に EntityManagerFactory をカスタマイズできるようにするフックメソッド。void
setDataSource
(DataSourceSE dataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。void
setJtaDataSource
(DataSourceSE jtaDataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。void
setLoadTimeWeaver
(LoadTimeWeaver loadTimeWeaver) JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を指定します。void
setManagedClassNameFilter
(ManagedClassNameFilter managedClassNameFilter) クラスパススキャンを使用して検出されたエンティティクラスに適用するようにManagedClassNameFilter
を設定します。void
setManagedTypes
(PersistenceManagedTypes managedTypes) エンティティスキャンの代わりに管理対象の型のリストを作成するために使用するPersistenceManagedTypes
を設定します。void
setMappingResources
(StringSE... mappingResources) デフォルトの永続性ユニットの 1 つ以上のマッピングリソース(persistence.xml
の<mapping-file>
エントリに相当)を指定します。void
setPackagesToScan
(StringSE... packagesToScan) persistence.xml
マーカーを含む jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに Spring ベースのスキャンを使用するかどうかを設定します。void
setPersistenceUnitManager
(PersistenceUnitManager persistenceUnitManager) この FactoryBean が EntityManagerFactory を構築することになっている JPA 永続性ユニットを取得するために使用する PersistenceUnitManager を設定します。void
setPersistenceUnitName
(StringSE persistenceUnitName) 該当する場合、指定された永続性ユニット名をデフォルトの永続性ユニットの名前として使用します。void
setPersistenceUnitPostProcessors
(PersistenceUnitPostProcessor... postProcessors) この EntityManagerFactory の作成に使用される PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。void
setPersistenceUnitRootLocation
(StringSE defaultPersistenceUnitRootLocation) デフォルトの永続性ユニットの永続性ユニットルートの場所を設定します。void
setPersistenceXmlLocation
(StringSE persistenceXmlLocation) 使用するpersistence.xml
ファイルの場所を設定します。void
setResourceLoader
(ResourceLoader resourceLoader) このオブジェクトが実行される ResourceLoader を設定します。void
setSharedCacheMode
(SharedCacheModeEE sharedCacheMode) この永続性ユニットに JPA 2.0 共有キャッシュモードを指定し、設定されている場合はpersistence.xml
の値をオーバーライドします。void
setValidationMode
(ValidationModeEE validationMode) この永続性ユニットの JPA 2.0 検証モードを指定し、設定されている場合はpersistence.xml
の値をオーバーライドします。クラス org.springframework.orm.jpa.AbstractEntityManagerFactoryBean から継承されたメソッド
afterSingletonsInstantiated, createEntityManagerFactoryProxy, createNativeEntityManager, destroy, getBeanClassLoader, getBootstrapExecutor, getEntityManagerInterface, getJpaDialect, getJpaPropertyMap, getJpaVendorAdapter, getNativeEntityManagerFactory, getObject, getObjectType, getPersistenceProvider, isSingleton, postProcessEntityManager, setBeanClassLoader, setBeanFactory, setBeanName, setBootstrapExecutor, setEntityManagerFactoryInterface, setEntityManagerInitializer, setEntityManagerInterface, setJpaDialect, setJpaProperties, setJpaPropertyMap, setJpaVendorAdapter, setPersistenceProvider, setPersistenceProviderClass, translateExceptionIfPossible, writeReplace
コンストラクターの詳細
LocalContainerEntityManagerFactoryBean
public LocalContainerEntityManagerFactoryBean()
メソッドの詳細
setPersistenceUnitManager
この FactoryBean が EntityManagerFactory を構築することになっている JPA 永続性ユニットを取得するために使用する PersistenceUnitManager を設定します。デフォルトでは、この FactoryBean で指定された "persistenceXmlLocation"、"dataSource"、"loadTimeWeaver" などのローカル設定に依存します。
既存の永続性ユニット構成またはカスタム永続性ユニット処理のより高度な形式を再利用するには、別個の PersistenceUnitManager Bean(通常は DefaultPersistenceUnitManager インスタンス)を定義し、ここにリンクすることを検討してください。このようなシナリオでは、
persistence.xml
ロケーション、DataSource 構成、LoadTimeWeaver は、その別個の DefaultPersistenceUnitManager Bean で定義されます。setPersistenceXmlLocation
使用するpersistence.xml
ファイルの場所を設定します。これは Spring リソースの場所です。デフォルトは "classpath:META-INF/persistence.xml" です。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
- パラメーター:
persistenceXmlLocation
- この LocalContainerEntityManagerFactoryBean が解析するpersistence.xml
ファイルの場所を識別する Spring リソース文字列- 関連事項:
setPersistenceUnitName
該当する場合、指定された永続性ユニット名をデフォルトの永続性ユニットの名前として使用します。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
setPersistenceUnitRootLocation
デフォルトの永続性ユニットの永続性ユニットルートの場所を設定します。デフォルトは "classpath:"、つまり現在のクラスパスのルート(最も近いルートディレクトリ)です。ユニット固有の解決が機能せず、クラスパスのルートも適切でない場合はオーバーライドされます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
setManagedTypes
エンティティスキャンの代わりに管理対象の型のリストを作成するために使用するPersistenceManagedTypes
を設定します。- パラメーター:
managedTypes
- 管理された型- 導入:
- 6.0
- 関連事項:
setPackagesToScan
persistence.xml
マーカーが含まれている jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに対して Spring ベースのスキャンを使用するかどうかを設定します。Spring ベースのスキャンの場合、persistence.xml
は必要ありません。ここで検索するベースパッケージを指定するだけです。デフォルトはなしです。クラスパスでエンティティクラスの自動検出を検索するパッケージを指定します。これは、Spring のコンポーネントスキャン機能(
ClassPathBeanDefinitionScanner
)に類似しています。代わりに、AOT 処理によってスキャンロジックを最適化できる
PersistenceManagedTypes
を設定することを検討してください。注: 通常の JPA スキャンと比較して制限がある場合があります。特に、JPA プロバイダーは、
persistence.xml
によって駆動される場合にのみ、プロバイダー固有のアノテーションのアノテーション付きパッケージを取得できます。4.1 では、指定されたJpaVendorAdapter
でサポートされている場合 (たとえば、Hibernate の場合)、Spring のスキャンはアノテーション付きパッケージも検出できます。これらのパッケージに加えて明示的な
mapping resources
が指定されていない場合、Spring のセットアップはクラスパスでデフォルトのMETA-INF/orm.xml
ファイルを探し、マッピングファイルがpersistence.xml
ファイルと同じ場所にない場合(デフォルトで)、それをデフォルトユニットのマッピングリソースとして登録します。この場合は、標準の JPA のように、そこで定義された永続性ユニットでのみ使用することを想定しています。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
- パラメーター:
packagesToScan
- 通常の Spring コンポーネントの Spring のコンポーネントスキャン構成に類似した、検索する 1 つ以上の基本パッケージ- 関連事項:
setManagedClassNameFilter
クラスパススキャンを使用して検出されたエンティティクラスに適用するようにManagedClassNameFilter
を設定します。- パラメーター:
managedClassNameFilter
- エンティティクラスをフィルタリングするための述語- 導入:
- 6.1.4
- 関連事項:
setMappingResources
デフォルトの永続性ユニットの 1 つ以上のマッピングリソース(persistence.xml
の<mapping-file>
エントリに相当)を指定します。単独で使用することも、クラスパスでエンティティスキャンと組み合わせて使用することもできます。どちらの場合も、persistence.xml
は使用しません。マッピングリソースは、
ClassLoader.getResource
を介してロードできるように、クラスパスルート ( "META-INF/mappings.xml" や "com/mycompany/repository/mappings.xml" など) を基準にする必要があることに注意してください。packages to scan
の隣に明示的なマッピングリソースが指定されていない場合、Spring のセットアップは、クラスパスでデフォルトのMETA-INF/orm.xml
ファイルを探し、マッピングファイルがpersistence.xml
ファイルと同じ場所にない場合(デフォルトのユニットのマッピングリソースとして登録します)ここでは、標準の JPA のように、そこで定義された永続性ユニットでのみ使用されることを想定しています。ここで空の配列 / リストを指定すると、デフォルトの
META-INF/orm.xml
チェックが抑制されることに注意してください。一方、ここでMETA-INF/orm.xml
を明示的に指定すると、persistence.xml
ファイルと同じ場所に配置されている場合でも、そのファイルが登録されます。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
setValidationMode
この永続性ユニットの JPA 2.0 検証モードを指定し、設定されている場合はpersistence.xml
の値をオーバーライドします。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
setDataSource
JPA 永続性プロバイダーがデータベースへのアクセスに使用する JDBC DataSource を指定します。これは、JDBC 構成をpersistence.xml
に保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言えば、ここで渡された DataSource は、PersistenceProvider に渡される PersistenceUnitInfo の "nonJtaDataSource" として使用され、
persistence.xml
(存在する場合) のデータソース構成も上書きされます。このバリアントは通常 JTA トランザクション管理にも機能することに注意してください。機能しない場合は、代わりに明示的なsetJtaDataSource(javax.sql.DataSource)
を使用することを検討してください。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
setJtaDataSource
JPA 永続性プロバイダーがデータベースへのアクセスに使用する JDBC DataSource を指定します。これは、JDBC 構成をpersistence.xml
に保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言えば、ここで渡された DataSource は、PersistenceProvider に渡される PersistenceUnitInfo の "jtaDataSource" として使用され、
persistence.xml
のデータソース構成 (存在する場合) もオーバーライドされます。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
setPersistenceUnitPostProcessors
この EntityManagerFactory の作成に使用される PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。このようなポストプロセッサーは、たとえば、
persistence.xml
から読み取られたメタデータに加えて、さらにエンティティクラスと jar ファイルを登録できます。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
setLoadTimeWeaver
JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を指定します。LoadTimeWeaver を指定する必要はありません。ほとんどのプロバイダーは、クラスインストルメンテーションなしで機能のサブセットを提供したり、JVM の起動時に指定された VM エージェントで動作したりできます。
Spring が提供するウィービングオプションの中で、最も重要なものは、JVM の起動時に指定された Spring に特化した(しかし非常に一般的な)VM エージェントを必要とする InstrumentationLoadTimeWeaver と、その上で利用可能な特定の拡張メソッドに基づいて基礎となる ClassLoader と相互作用する ReflectiveLoadTimeWeaver です。
注意 : Spring 2.5 以降、コンテキストのデフォルトの LoadTimeWeaver (名前が "loadTimeWeaver" の Bean として定義) が利用可能な場合は自動的に取得されるため、影響を受ける各ターゲット Bean で LoadTimeWeaver を構成する必要がなくなります。このような共有 LoadTimeWeaver を作成するには、
context:load-time-weaver
XML タグの使用を検討してください (デフォルトで環境を自動検出します)。注意 : 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。それ以外の場合、外部
PersistenceUnitManager
がウィービング構成を担当します。- 次で指定:
- インターフェース
LoadTimeWeaverAware
のsetLoadTimeWeaver
- パラメーター:
loadTimeWeaver
-LoadTimeWeaver
インスタンス (非null
)- 関連事項:
setResourceLoader
インターフェースからコピーされた説明:ResourceLoaderAware
このオブジェクトが実行される ResourceLoader を設定します。これは ResourcePatternResolver であり、
instanceof ResourcePatternResolver
で確認できます。ResourcePatternUtils.getResourcePatternResolver
メソッドも参照してください。通常の Bean プロパティの設定後、InitializingBean の
afterPropertiesSet
またはカスタム init メソッドのような初期コールバックの前に呼び出されます。ApplicationContextAware のsetApplicationContext
の前に呼び出されます。- 次で指定:
- インターフェース
ResourceLoaderAware
のsetResourceLoader
- パラメーター:
resourceLoader
- このオブジェクトによって使用される ResourceLoader オブジェクト- 関連事項:
afterPropertiesSet
インターフェースからコピーされた説明:InitializingBean
すべての Bean プロパティを設定し、BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
- 次で指定:
- インターフェース
InitializingBean
のafterPropertiesSet
- オーバーライド:
- クラス
AbstractEntityManagerFactoryBean
のafterPropertiesSet
- 例外:
PersistenceExceptionEE
createNativeEntityManagerFactory
クラスからコピーされた説明:AbstractEntityManagerFactoryBean
サブクラスは、このメソッドを実装して、getObject()
メソッドによって返される EntityManagerFactory を作成する必要があります。- 次で指定:
- クラス
AbstractEntityManagerFactoryBean
のcreateNativeEntityManagerFactory
- 戻り値:
- この FactoryBean によって返される EntityManagerFactory インスタンス
- 例外:
PersistenceExceptionEE
- EntityManager を作成できない場合
determinePersistenceUnitInfo
protected PersistenceUnitInfoEE determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager) この Bean によって作成された EntityManagerFactory に使用する PersistenceUnitInfo を決定します。デフォルトの実装では、JPA 仕様で定義されているように、すべての永続性ユニット情報を
persistence.xml
から読み取ります。エンティティマネージャー名が指定されていない場合は、リーダーから返された配列の最初の情報を取得します。それ以外の場合は、一致する名前を確認します。- パラメーター:
persistenceUnitManager
- から取得する PersistenceUnitManager- 戻り値:
- 選択された PersistenceUnitInfo
postProcessEntityManagerFactory
protected void postProcessEntityManagerFactory(EntityManagerFactoryEE emf, PersistenceUnitInfoEE pui) サブクラスが PersistenceProvider を介して作成した後に EntityManagerFactory をカスタマイズできるようにするフックメソッド。デフォルトの実装は空です。
- パラメーター:
emf
- 新しく作成した EntityManagerFactory で作業していますpui
- EntityManagerFactory の構成に使用される PersistenceUnitInfo- 関連事項:
getPersistenceUnitInfo
インターフェースからコピーされた説明:EntityManagerFactoryInfo
コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetPersistenceUnitInfo
- オーバーライド:
- クラス
AbstractEntityManagerFactoryBean
のgetPersistenceUnitInfo
- 戻り値:
- この EntityManagerFactory の作成に使用された PersistenceUnitInfo、またはコンテナー内契約が EntityManagerFactory の構成に使用されなかった場合は
null
getPersistenceUnitName
インターフェースからコピーされた説明:EntityManagerFactoryInfo
この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合はnull
を返します。getPersistenceUnitInfo()
が null 以外を返す場合、getPersistenceUnitName()
の結果はPersistenceUnitInfo.getPersistenceUnitName()
によって返される値と等しくなければなりません。getDataSource
インターフェースからコピーされた説明:EntityManagerFactoryInfo
この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfo
のgetDataSource
- オーバーライド:
- クラス
AbstractEntityManagerFactoryBean
のgetDataSource
- 戻り値:
- JDBC DataSource、または不明の場合は
null