public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean implements ResourceLoaderAware, LoadTimeWeaverAware
EntityManagerFactoryEE を作成する 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 ファイル自体を解析し、対応する PersistenceUnitInfoEE オブジェクト(JDBC DataSources や Spring LoadTimeWeaver などの追加の構成をマージしたもの)を作成して、選択した JPA PersistenceProviderEE に渡します。これは、標準 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() |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected EntityManagerFactoryEE | createNativeEntityManagerFactory() サブクラスは、このメソッドを実装して、 getObject() メソッドによって返される EntityManagerFactory を作成する必要があります。 |
protected PersistenceUnitInfoEE | determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager) この Bean によって作成された EntityManagerFactory に使用する PersistenceUnitInfo を決定します。 |
DataSourceSE | getDataSource() この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。 |
PersistenceUnitInfoEE | getPersistenceUnitInfo() コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。 |
StringSE | getPersistenceUnitName() この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合は null を返します。 |
protected void | postProcessEntityManagerFactory(EntityManagerFactoryEE emf, PersistenceUnitInfoEE pui) サブクラスが PersistenceProvider を介して作成した後に EntityManagerFactory をカスタマイズできるようにするフックメソッド。 |
void | setDataSource(DataSourceSE dataSource)JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setJtaDataSource(DataSourceSE jtaDataSource)JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。 |
void | setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver)JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を指定します。 |
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 の値をオーバーライドします。 |
afterPropertiesSet, 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, writeReplacecloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic void setPersistenceUnitManager(PersistenceUnitManager persistenceUnitManager)
デフォルトでは、この FactoryBean で指定された "persistenceXmlLocation"、"dataSource"、"loadTimeWeaver" などのローカル設定に依存します。
既存の永続性ユニット構成またはカスタム永続性ユニット処理のより高度な形式を再利用するには、別個の PersistenceUnitManager Bean(通常は DefaultPersistenceUnitManager インスタンス)を定義し、ここにリンクすることを検討してください。このようなシナリオでは、persistence.xml ロケーション、DataSource 構成、LoadTimeWeaver は、その別個の DefaultPersistenceUnitManager Bean で定義されます。
public void setPersistenceXmlLocation(StringSE 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 StringSE persistenceUnitName)
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation)
デフォルトは "classpath:"、つまり現在のクラスパスのルート(最も近いルートディレクトリ)です。ユニット固有の解決が機能せず、クラスパスのルートも適切でない場合はオーバーライドされます。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setPackagesToScan(StringSE... 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(StringSE... 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(DataSourceSE dataSource)
persistence.xml に保持する代わりに、代わりに Spring 管理の DataSource を渡します。JPA で言えば、ここで渡された DataSource は、PersistenceProvider に渡される PersistenceUnitInfo の "nonJtaDataSource" として使用され、persistence.xml (存在する場合) のデータソース構成も上書きされます。このバリアントは通常 JTA トランザクション管理にも機能することに注意してください。機能しない場合は、代わりに明示的な setJtaDataSource(javax.sql.DataSource) を使用することを検討してください。
NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。
public void setJtaDataSource(DataSourceSE 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 (Bean として定義され、名前は "loadTimeWeaver" です) が使用可能な場合は自動的に選択されるため、影響を受ける各ターゲット Bean で LoadTimeWeaver を構成する必要がなくなります。このような共有 LoadTimeWeaver を作成するには、context:load-time-weaver XML タグの使用を検討してください (デフォルトで環境を自動検出します)。
注: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。それ以外の場合、外部 PersistenceUnitManager がウィービング構成を担当します。
LoadTimeWeaverAware の setLoadTimeWeaver loadTimeWeaver - LoadTimeWeaver インスタンス (非 null)InstrumentationLoadTimeWeaver, ReflectiveLoadTimeWeaverpublic 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)protected EntityManagerFactoryEE createNativeEntityManagerFactory() throws PersistenceExceptionEE
AbstractEntityManagerFactoryBeangetObject() メソッドによって返される 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()
EntityManagerFactoryInfoEntityManagerFactoryInfo の getPersistenceUnitInfo AbstractEntityManagerFactoryBean の getPersistenceUnitInfo null @Nullable public StringSE getPersistenceUnitName()
EntityManagerFactoryInfonull を返します。getPersistenceUnitInfo() が null 以外を返す場合、getPersistenceUnitName() の結果は PersistenceUnitInfo.getPersistenceUnitName() によって返される値と等しくなければなりません。
public DataSourceSE getDataSource()
EntityManagerFactoryInfoEntityManagerFactoryInfo の getDataSource AbstractEntityManagerFactoryBean の getDataSource null