public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean implements ResourceLoaderAware, LoadTimeWeaverAware
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
インターフェースを実装します。
注: Spring の JPA サポートには、Spring 5.0 以降、JPA 2.1 以上が必要です。JPA 1.0/2.0 ベースのアプリケーションは引き続きサポートされています。ただし、実行時には JPA 2.1 準拠の永続性プロバイダーが必要です。
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(javax.persistence.spi.PersistenceUnitInfo, java.util.Map)
EE, 直列化された形式 logger
コンストラクターと説明 |
---|
LocalContainerEntityManagerFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
protected EntityManagerFactoryEE | createNativeEntityManagerFactory() サブクラスは、このメソッドを実装して、 getObject() メソッドによって返される EntityManagerFactory を作成する必要があります。 |
protected PersistenceUnitInfoEE | determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager) この Bean によって作成された EntityManagerFactory に使用する PersistenceUnitInfo を決定します。 |
javax.sql.DataSource | getDataSource() この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。 |
PersistenceUnitInfoEE | getPersistenceUnitInfo() コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。 |
java.lang.String | getPersistenceUnitName() この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合は null を返します。 |
protected void | postProcessEntityManagerFactory(EntityManagerFactoryEE emf, PersistenceUnitInfoEE pui) サブクラスが PersistenceProvider を介して作成した後に EntityManagerFactory をカスタマイズできるようにするフックメソッド。 |
void | setDataSource(javax.sql.DataSource dataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setJtaDataSource(javax.sql.DataSource jtaDataSource) JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver) JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を指定します。 |
void | setMappingResources(java.lang.String... mappingResources) デフォルトの永続性ユニットの 1 つ以上のマッピングリソース( persistence.xml の <mapping-file> エントリに相当)を指定します。 |
void | setPackagesToScan(java.lang.String... packagesToScan) persistence.xml マーカーを含む jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに Spring ベースのスキャンを使用するかどうかを設定します。 |
void | setPersistenceUnitManager(PersistenceUnitManager persistenceUnitManager) この FactoryBean が EntityManagerFactory を構築することになっている JPA 永続性ユニットを取得するために使用する PersistenceUnitManager を設定します。 |
void | setPersistenceUnitName(java.lang.String persistenceUnitName) 該当する場合、指定された永続性ユニット名をデフォルトの永続性ユニットの名前として使用します。 |
void | setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors) この EntityManagerFactory の作成に使用される PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。 |
void | setPersistenceUnitRootLocation(java.lang.String defaultPersistenceUnitRootLocation) デフォルトの永続性ユニットの永続性ユニットルートの場所を設定します。 |
void | setPersistenceXmlLocation(java.lang.String 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 の値をオーバーライドします。 |
createEntityManagerFactoryProxy, destroy, getBeanClassLoader, getBootstrapExecutor, getEntityManagerInterface, getJpaDialect, getJpaPropertyMap, getJpaVendorAdapter, getNativeEntityManagerFactory, getObject, getObjectType, getPersistenceProvider, isSingleton, setBeanClassLoader, setBeanFactory, setBeanName, setBootstrapExecutor, setEntityManagerFactoryInterface, setEntityManagerInterface, setJpaDialect, setJpaProperties, setJpaPropertyMap, setJpaVendorAdapter, setPersistenceProvider, setPersistenceProviderClass, translateExceptionIfPossible, writeReplace
public void setPersistenceUnitManager(PersistenceUnitManager persistenceUnitManager)
デフォルトでは、"persistenceXmlLocation"、"dataSource"、"loadTimeWeaver" など、この FactoryBean で指定されたローカル設定に依存します。
既存の永続性ユニット構成またはカスタム永続性ユニット処理のより高度な形式を再利用するには、別個の PersistenceUnitManager Bean(通常は DefaultPersistenceUnitManager インスタンス)を定義し、ここにリンクすることを検討してください。このようなシナリオでは、persistence.xml
ロケーション、DataSource 構成、LoadTimeWeaver は、その別個の DefaultPersistenceUnitManager Bean で定義されます。
public void setPersistenceXmlLocation(java.lang.String persistenceXmlLocation)
persistence.xml
ファイルの場所を設定します。これは Spring リソースの場所です。デフォルトは "classpath:META-INF/persistence.xml" です。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
persistenceXmlLocation
- この LocalContainerEntityManagerFactoryBean が解析する persistence.xml
ファイルの場所を識別する Spring リソース文字列 setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
public void setPersistenceUnitName(@Nullable java.lang.String persistenceUnitName)
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPersistenceUnitRootLocation(java.lang.String defaultPersistenceUnitRootLocation)
デフォルトは "classpath:"、つまり現在のクラスパスのルート(最も近いルートディレクトリ)です。ユニット固有の解決が機能せず、クラスパスのルートも適切でない場合はオーバーライドされます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPackagesToScan(java.lang.String... packagesToScan)
persistence.xml
マーカーが含まれている jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに対して Spring ベースのスキャンを使用するかどうかを設定します。Spring ベースのスキャンの場合、persistence.xml
は必要ありません。ここで検索するベースパッケージを指定するだけです。 デフォルトはなしです。クラスパスでエンティティクラスの自動検出を検索するパッケージを指定します。これは、Spring のコンポーネントスキャン機能(ClassPathBeanDefinitionScanner
)に類似しています。
注: 通常の JPA スキャンと比較すると、制限がある場合があります。特に、JPA プロバイダーは、persistence.xml
によって駆動される場合にのみ、プロバイダー固有のアノテーションのアノテーション付きパッケージを取得できます。4.1 以降、Spring のスキャンは、指定された JpaVendorAdapter
(Hibernate など)でサポートされている場合、アノテーション付きパッケージも検出できます。
これらのパッケージに加えて明示的な mapping resources
が指定されていない場合、Spring のセットアップはクラスパスでデフォルトの META-INF/orm.xml
ファイルを探し、マッピングファイルが persistence.xml
ファイルと同じ場所にない場合(デフォルトで)、それをデフォルトユニットのマッピングリソースとして登録します。この場合は、標準の JPA のように、そこで定義された永続性ユニットでのみ使用することを想定しています。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
packagesToScan
- 通常の Spring コンポーネントの Spring のコンポーネントスキャン構成に類似した、検索する 1 つ以上の基本パッケージ setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
, DefaultPersistenceUnitManager.setPackagesToScan(java.lang.String...)
public void setMappingResources(java.lang.String... mappingResources)
persistence.xml
の <mapping-file>
エントリに相当)を指定します。単独で使用することも、クラスパスでエンティティスキャンと組み合わせて使用することもできます。どちらの場合も、persistence.xml
は使用しません。 マッピングリソースは、クラスパスルートに対して相対的でなければならないことに注意してください。"META-INF/mappings.xml" または "com/mycompany/repository/mappings.xml"。これにより、ClassLoader.getResource
を介してロードできます。
packages to scan
の隣に明示的なマッピングリソースが指定されていない場合、Spring のセットアップは、クラスパスでデフォルトの META-INF/orm.xml
ファイルを探し、マッピングファイルが persistence.xml
ファイルと同じ場所にない場合(デフォルトのユニットのマッピングリソースとして登録します)ここでは、標準の JPA のように、そこで定義された永続性ユニットでのみ使用されることを想定しています。
ここで空の配列 / リストを指定すると、デフォルトの META-INF/orm.xml
チェックが抑制されることに注意してください。一方、ここで META-INF/orm.xml
を明示的に指定すると、persistence.xml
ファイルと同じ場所に配置されている場合でも、そのファイルが登録されます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setSharedCacheMode(SharedCacheModeEE sharedCacheMode)
persistence.xml
の値をオーバーライドします。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setValidationMode(ValidationModeEE validationMode)
persistence.xml
の値をオーバーライドします。NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setDataSource(javax.sql.DataSource dataSource)
persistence.xml
に保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言うと、ここで渡された DataSource は、PersistenceProvider に渡された PersistenceUnitInfo の "nonJtaDataSource" として使用され、persistence.xml
(存在する場合)のデータソース構成をオーバーライドします。このバリアントは通常、JTA トランザクション管理でも機能することに注意してください。そうでない場合は、代わりに明示的な setJtaDataSource(javax.sql.DataSource)
の使用を検討してください。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setJtaDataSource(javax.sql.DataSource jtaDataSource)
persistence.xml
に保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言うと、ここで渡された DataSource は、PersistenceProvider に渡された PersistenceUnitInfo の "jtaDataSource" として使用され、persistence.xml
(存在する場合)のデータソース設定をオーバーライドします。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors)
このようなポストプロセッサーは、たとえば、persistence.xml
から読み取られたメタデータに加えて、さらにエンティティクラスと jar ファイルを登録できます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setLoadTimeWeaver(LoadTimeWeaver 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
)InstrumentationLoadTimeWeaver
, ReflectiveLoadTimeWeaver
public void setResourceLoader(ResourceLoader resourceLoader)
ResourceLoaderAware
これは ResourcePatternResolver であり、instanceof ResourcePatternResolver
で確認できます。ResourcePatternUtils.getResourcePatternResolver
メソッドも参照してください。
通常の Bean プロパティの設定後、InitializingBean の afterPropertiesSet
またはカスタム init メソッドのような初期コールバックの前に呼び出されます。ApplicationContextAware の setApplicationContext
の前に呼び出されます。
ResourceLoaderAware
の setResourceLoader
resourceLoader
- このオブジェクトによって使用される ResourceLoader オブジェクト ResourcePatternResolver
, ResourcePatternUtils.getResourcePatternResolver(org.springframework.core.io.ResourceLoader)
public void afterPropertiesSet() throws PersistenceExceptionEE
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
AbstractEntityManagerFactoryBean
の afterPropertiesSet
PersistenceExceptionEE
protected EntityManagerFactoryEE createNativeEntityManagerFactory() throws PersistenceExceptionEE
AbstractEntityManagerFactoryBean
getObject()
メソッドによって返される EntityManagerFactory を作成する必要があります。AbstractEntityManagerFactoryBean
の createNativeEntityManagerFactory
PersistenceExceptionEE
- EntityManager を作成できない場合 protected PersistenceUnitInfoEE determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager)
デフォルトの実装では、JPA 仕様で定義されているように、すべての永続性ユニット情報を persistence.xml
から読み取ります。エンティティマネージャー名が指定されていない場合は、リーダーから返された配列の最初の情報を取得します。それ以外の場合は、一致する名前を確認します。
persistenceUnitManager
- から取得する PersistenceUnitManagerprotected void postProcessEntityManagerFactory(EntityManagerFactoryEE emf, PersistenceUnitInfoEE pui)
デフォルトの実装は空です。
emf
- 新しく作成した EntityManagerFactory で作業しています pui
- EntityManagerFactory の構成に使用される PersistenceUnitInfoPersistenceProvider.createContainerEntityManagerFactory(javax.persistence.spi.PersistenceUnitInfo, java.util.Map)
EE@Nullable public PersistenceUnitInfoEE getPersistenceUnitInfo()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getPersistenceUnitInfo
AbstractEntityManagerFactoryBean
の getPersistenceUnitInfo
null
@Nullable public java.lang.String getPersistenceUnitName()
EntityManagerFactoryInfo
null
を返します。getPersistenceUnitInfo()
が null 以外を返す場合、getPersistenceUnitName()
の結果は PersistenceUnitInfo.getPersistenceUnitName()
によって返される値と等しくなければなりません。
public javax.sql.DataSource getDataSource()
EntityManagerFactoryInfo
EntityManagerFactoryInfo
の getDataSource
AbstractEntityManagerFactoryBean
の getDataSource
null