クラス LocalContainerEntityManagerFactoryBean
- 実装されているすべてのインターフェース:
SerializableSE, Aware, BeanClassLoaderAware, BeanFactoryAware, BeanNameAware, DisposableBean, FactoryBean<jakarta.persistence.EntityManagerFactory>, InitializingBean, SmartFactoryBean<jakarta.persistence.EntityManagerFactory>, SmartInitializingSingleton, ResourceLoaderAware, LoadTimeWeaverAware, PersistenceExceptionTranslator, EntityManagerFactoryInfo
EntityManagerFactory を作成する 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 オブジェクト(JDBC DataSources や Spring LoadTimeWeaver などの追加設定がマージされたもの)を作成し、選択された JPA PersistenceProvider に渡します。これは、標準 JPA コンテナー規約を完全にサポートするローカル JPA コンテナーに相当します。
公開された EntityManagerFactory オブジェクトは、PersistenceProvider によって返される基礎となるネイティブ EntityManagerFactory のすべてのインターフェースと、この FactoryBean によって組み立てられた追加のメタデータを公開する EntityManagerFactoryInfo インターフェースを実装します。
- 導入:
- 2.0
- 作成者:
- Juergen Hoeller, Rod Johnson
- 関連事項:
フィールドのサマリー
クラス AbstractEntityManagerFactoryBean から継承されたフィールド
loggerインターフェース FactoryBean から継承されたフィールド
OBJECT_TYPE_ATTRIBUTEコンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明voidprotected jakarta.persistence.EntityManagerFactoryサブクラスは、このメソッドを実装して、getObject()メソッドによって返される EntityManagerFactory を作成する必要があります。protected jakarta.persistence.spi.PersistenceUnitInfodeterminePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager) この Bean によって作成された EntityManagerFactory に使用する PersistenceUnitInfo を決定します。この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。@Nullable jakarta.persistence.spi.PersistenceUnitInfoコンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合はnullを返します。protected voidpostProcessEntityManagerFactory(jakarta.persistence.EntityManagerFactory emf, jakarta.persistence.spi.PersistenceUnitInfo pui) サブクラスが PersistenceProvider を介して作成した後に EntityManagerFactory をカスタマイズできるようにするフックメソッド。voidsetDataSource(@Nullable DataSourceSE dataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。voidsetJtaDataSource(@Nullable DataSourceSE jtaDataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。voidsetLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver) JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を指定します。voidsetManagedClassNameFilter(ManagedClassNameFilter managedClassNameFilter) クラスパススキャンを使用して検出されたエンティティクラスに適用するようにManagedClassNameFilterを設定します。voidsetManagedTypes(PersistenceManagedTypes managedTypes) エンティティスキャンの代わりに管理対象の型のリストを作成するために使用するPersistenceManagedTypesを設定します。voidsetMappingResources(StringSE... mappingResources) デフォルトの永続性ユニットの 1 つ以上のマッピングリソース(persistence.xmlの<mapping-file>エントリに相当)を指定します。voidsetPackagesToScan(StringSE... packagesToScan) persistence.xmlマーカーを含む jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに Spring ベースのスキャンを使用するかどうかを設定します。voidsetPersistenceConfiguration(jakarta.persistence.PersistenceConfiguration configuration) この永続性ユニットに使用するローカル JPA 3.2PersistenceConfigurationを設定します。voidsetPersistenceUnitManager(PersistenceUnitManager persistenceUnitManager) この FactoryBean が EntityManagerFactory を構築することになっている JPA 永続性ユニットを取得するために使用する PersistenceUnitManager を設定します。voidsetPersistenceUnitName(@Nullable StringSE persistenceUnitName) 該当する場合、指定された永続性ユニット名をデフォルトの永続性ユニットの名前として使用します。voidsetPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors) この EntityManagerFactory の作成に使用される PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。voidsetPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation) デフォルトの永続性ユニットの永続性ユニットルートの場所を設定します。voidsetPersistenceXmlLocation(StringSE persistenceXmlLocation) 使用するpersistence.xmlファイルの場所を設定します。voidsetResourceLoader(ResourceLoader resourceLoader) このオブジェクトが実行される ResourceLoader を設定します。voidsetSharedCacheMode(jakarta.persistence.SharedCacheMode sharedCacheMode) この永続性ユニットに JPA 2.0 共有キャッシュモードを指定し、設定されている場合はpersistence.xmlの値をオーバーライドします。voidsetValidationMode(jakarta.persistence.ValidationMode validationMode) この永続性ユニットの JPA 2.0 検証モードを指定し、設定されている場合はpersistence.xmlの値をオーバーライドします。クラス AbstractEntityManagerFactoryBean から継承されたメソッド
afterSingletonsInstantiated, createEntityManagerFactoryProxy, createNativeEntityManager, destroy, getBeanClassLoader, getBeanFactory, getBeanName, getBootstrapExecutor, getEntityManagerInterface, getJpaDialect, getJpaPropertyMap, getJpaVendorAdapter, getNativeEntityManagerFactory, getObject, getObject, getObjectType, getPersistenceProvider, postProcessEntityManager, setBeanClassLoader, setBeanFactory, setBeanName, setBootstrapExecutor, setEntityManagerFactoryInterface, setEntityManagerInitializer, setEntityManagerInterface, setJpaDialect, setJpaProperties, setJpaPropertyMap, setJpaVendorAdapter, setPersistenceProvider, setPersistenceProviderClass, supportsType, translateExceptionIfPossible, writeReplaceクラス ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSEインターフェース FactoryBean から継承されたメソッド
isSingletonインターフェース SmartFactoryBean から継承されたメソッド
isEagerInit, isPrototype
コンストラクターの詳細
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 が指定されていない場合にのみ適用されます。
- オーバーライド:
- クラス
AbstractEntityManagerFactoryBeanのsetPersistenceUnitName - 関連事項:
setPersistenceUnitRootLocation
デフォルトの永続性ユニットの永続性ユニットルートの場所を設定します。デフォルトは "classpath:"、つまり現在のクラスパスのルート(最も近いルートディレクトリ)です。ユニット固有の解決が機能せず、クラスパスのルートも適切でない場合はオーバーライドされます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
- 導入:
- 4.3.3
- 関連事項:
setPersistenceConfiguration
public void setPersistenceConfiguration(jakarta.persistence.PersistenceConfiguration configuration) この永続性ユニットに使用するローカル JPA 3.2PersistenceConfigurationを設定します。メモ:
PersistenceConfigurationには永続ユニット名が含まれているため、実質的にsetPersistenceUnitName(String)メソッドをオーバーライドします。一方、その他の設定はすべてPersistenceConfigurationインスタンスの設定とマージされます。- 導入:
- 7.0
- 関連事項:
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
public void setValidationMode(jakarta.persistence.ValidationMode validationMode) この永続性ユニットの JPA 2.0 検証モードを指定し、設定されている場合はpersistence.xmlの値をオーバーライドします。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
- 導入:
- 4.0
- 関連事項:
setDataSource
JPA 永続性プロバイダーがデータベースへのアクセスに使用する JDBC DataSource を指定します。これは、JDBC 構成をpersistence.xmlに保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言えば、ここで渡された DataSource は、PersistenceProvider に渡される PersistenceUnitInfo の "nonJtaDataSource" として使用され、
persistence.xml(存在する場合) のデータソース構成も上書きされます。このバリアントは通常 JTA トランザクション管理にも機能することに注意してください。機能しない場合は、代わりに明示的なsetJtaDataSource(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-weaverXML タグの使用を検討してください (デフォルトで環境を自動検出します)。注意 : 外部 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
public void afterPropertiesSet() throws jakarta.persistence.PersistenceExceptionインターフェースからコピーされた説明:InitializingBeanすべての Bean プロパティを設定し、BeanFactoryAware、ApplicationContextAwareなどを満たした後、包含BeanFactoryによって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
- 次で指定:
- インターフェース
InitializingBeanのafterPropertiesSet - オーバーライド:
- クラス
AbstractEntityManagerFactoryBeanのafterPropertiesSet - 例外:
jakarta.persistence.PersistenceException
createNativeEntityManagerFactory
protected jakarta.persistence.EntityManagerFactory createNativeEntityManagerFactory() throws jakarta.persistence.PersistenceExceptionクラスからコピーされた説明:AbstractEntityManagerFactoryBeanサブクラスは、このメソッドを実装して、getObject()メソッドによって返される EntityManagerFactory を作成する必要があります。- 次で指定:
- クラス
AbstractEntityManagerFactoryBeanのcreateNativeEntityManagerFactory - 戻り値:
- この FactoryBean によって返される EntityManagerFactory インスタンス
- 例外:
jakarta.persistence.PersistenceException- EntityManager を作成できない場合
determinePersistenceUnitInfo
protected jakarta.persistence.spi.PersistenceUnitInfo determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager) この Bean によって作成された EntityManagerFactory に使用する PersistenceUnitInfo を決定します。デフォルトの実装では、JPA 仕様で定義されている
persistence.xmlからすべての永続ユニット情報を読み取り、ユニット名で選択します。永続ユニット名が指定されていない場合は、デフォルトのユニット名が設定されている場合はそのユニットが使用され、そうでない場合は、リーダーによって最初に見つかった永続ユニットが使用されます。- パラメーター:
persistenceUnitManager- から取得する PersistenceUnitManager- 戻り値:
- 選択された PersistenceUnitInfo
postProcessEntityManagerFactory
protected void postProcessEntityManagerFactory(jakarta.persistence.EntityManagerFactory emf, jakarta.persistence.spi.PersistenceUnitInfo 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()によって返される値と等しくなければなりません。- 次で指定:
- インターフェース
EntityManagerFactoryInfoのgetPersistenceUnitName - オーバーライド:
- クラス
AbstractEntityManagerFactoryBeanのgetPersistenceUnitName - 関連事項:
getDataSource
インターフェースからコピーされた説明:EntityManagerFactoryInfoこの EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。- 次で指定:
- インターフェース
EntityManagerFactoryInfoのgetDataSource - オーバーライド:
- クラス
AbstractEntityManagerFactoryBeanのgetDataSource - 戻り値:
- JDBC DataSource、または不明の場合は
null