クラス LocalContainerEntityManagerFactoryBean

java.lang.ObjectSE
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
実装されたすべてのインターフェース:
SerializableSEAwareBeanClassLoaderAwareBeanFactoryAwareBeanNameAwareDisposableBeanFactoryBean<EntityManagerFactoryEE>InitializingBeanResourceLoaderAwareLoadTimeWeaverAwarePersistenceExceptionTranslatorEntityManagerFactoryInfo

public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean implements ResourceLoaderAware, LoadTimeWeaverAware
JPA の標準コンテナーブートストラップ契約に従って JPA 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 インターフェースを実装します。

導入:
2.0
作成者:
Juergen Hoeller, Rod Johnson
関連事項:
  • コンストラクターの詳細

    • LocalContainerEntityManagerFactoryBean

      public LocalContainerEntityManagerFactoryBean()
  • メソッドの詳細

    • setPersistenceUnitManager

      public void setPersistenceUnitManager(PersistenceUnitManager persistenceUnitManager)
      この FactoryBean が EntityManagerFactory を構築することになっている JPA 永続性ユニットを取得するために使用する PersistenceUnitManager を設定します。

      デフォルトでは、"persistenceXmlLocation"、"dataSource"、"loadTimeWeaver" など、この FactoryBean で指定されたローカル設定に依存します。

      既存の永続性ユニット構成またはカスタム永続性ユニット処理のより高度な形式を再利用するには、別個の PersistenceUnitManager Bean(通常は DefaultPersistenceUnitManager インスタンス)を定義し、ここにリンクすることを検討してください。このようなシナリオでは、persistence.xml ロケーション、DataSource 構成、LoadTimeWeaver は、その別個の DefaultPersistenceUnitManager Bean で定義されます。

      関連事項:
    • setPersistenceXmlLocation

      public void setPersistenceXmlLocation(StringSE persistenceXmlLocation)
      使用する persistence.xml ファイルの場所を設定します。これは Spring リソースの場所です。

      デフォルトは "classpath:META-INF/persistence.xml" です。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      パラメーター:
      persistenceXmlLocation - この LocalContainerEntityManagerFactoryBean が解析する persistence.xml ファイルの場所を識別する Spring リソース文字列
      関連事項:
    • setPersistenceUnitName

      public void setPersistenceUnitName(@Nullable StringSE persistenceUnitName)
      該当する場合、指定された永続性ユニット名をデフォルトの永続性ユニットの名前として使用します。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      オーバーライド:
      クラス AbstractEntityManagerFactoryBeansetPersistenceUnitName 
      関連事項:
    • setPersistenceUnitRootLocation

      public void setPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation)
      デフォルトの永続性ユニットの永続性ユニットルートの場所を設定します。

      デフォルトは "classpath:"、つまり現在のクラスパスのルート(最も近いルートディレクトリ)です。ユニット固有の解決が機能せず、クラスパスのルートも適切でない場合はオーバーライドされます。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      導入:
      4.3.3
      関連事項:
    • setManagedTypes

      public void setManagedTypes(PersistenceManagedTypes managedTypes)
      エンティティスキャンの代わりに管理対象の型のリストを作成するために使用する PersistenceManagedTypes を設定します。
      パラメーター:
      managedTypes - 管理された型
      導入:
      6.0
      関連事項:
    • setPackagesToScan

      public void setPackagesToScan(StringSE... packagesToScan)
      persistence.xml マーカーが含まれている jar ファイルの JPA の標準スキャンを使用する代わりに、クラスパスのエンティティクラスに対して Spring ベースのスキャンを使用するかどうかを設定します。Spring ベースのスキャンの場合、persistence.xml は必要ありません。ここで検索するベースパッケージを指定するだけです。

      デフォルトはなしです。クラスパスでエンティティクラスの自動検出を検索するパッケージを指定します。これは、Spring のコンポーネントスキャン機能(ClassPathBeanDefinitionScanner)に類似しています。

      代わりに、AOT 処理によってスキャンロジックを最適化できる PersistenceManagedTypes を設定することを検討してください。

      注: 通常の 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 つ以上の基本パッケージ
      関連事項:
    • setManagedClassNameFilter

      public void setManagedClassNameFilter(ManagedClassNameFilter managedClassNameFilter)
      クラスパススキャンを使用して検出されたエンティティクラスに適用するように ManagedClassNameFilter を設定します。
      パラメーター:
      managedClassNameFilter - エンティティクラスをフィルタリングするための述語
      導入:
      6.1.4
      関連事項:
    • setMappingResources

      public void setMappingResources(StringSE... mappingResources)
      デフォルトの永続性ユニットの 1 つ以上のマッピングリソース(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 が指定されていない場合にのみ適用されます。

      関連事項:
    • setSharedCacheMode

      public void setSharedCacheMode(SharedCacheModeEE sharedCacheMode)
      この永続性ユニットに JPA 2.0 共有キャッシュモードを指定し、設定されている場合は persistence.xml の値をオーバーライドします。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      導入:
      4.0
      関連事項:
    • setValidationMode

      public void setValidationMode(ValidationModeEE validationMode)
      この永続性ユニットの JPA 2.0 検証モードを指定し、設定されている場合は persistence.xml の値をオーバーライドします。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      導入:
      4.0
      関連事項:
    • setDataSource

      public void setDataSource(@Nullable DataSourceSE dataSource)
      JPA 永続性プロバイダーがデータベースへのアクセスに使用する JDBC DataSource を指定します。これは、JDBC 構成を persistence.xml に保持する代わりに、代わりに Spring 管理の DataSource を渡します。

      JPA で言うと、ここで渡された DataSource は、PersistenceProvider に渡された PersistenceUnitInfo の "nonJtaDataSource" として使用され、persistence.xml (存在する場合)のデータソース構成をオーバーライドします。このバリアントは通常、JTA トランザクション管理でも機能することに注意してください。そうでない場合は、代わりに明示的な setJtaDataSource(javax.sql.DataSource) の使用を検討してください。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      関連事項:
    • setJtaDataSource

      public void setJtaDataSource(@Nullable DataSourceSE jtaDataSource)
      JPA 永続性プロバイダーがデータベースへのアクセスに使用する JDBC DataSource を指定します。これは、JDBC 構成を persistence.xml に保持する代わりに、代わりに Spring 管理の DataSource を渡します。

      JPA で言うと、ここで渡された DataSource は、PersistenceProvider に渡された PersistenceUnitInfo の "jtaDataSource" として使用され、persistence.xml (存在する場合)のデータソース設定をオーバーライドします。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      関連事項:
    • setPersistenceUnitPostProcessors

      public void setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors)
      この EntityManagerFactory の作成に使用される PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。

      このようなポストプロセッサーは、たとえば、persistence.xml から読み取られたメタデータに加えて、さらにエンティティクラスと jar ファイルを登録できます。

      NOTE: 外部 PersistenceUnitManager が指定されていない場合にのみ適用されます。

      関連事項:
    • setLoadTimeWeaver

      public void setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver)
      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 がウィービング構成を担当します。

      次で指定:
      インターフェース LoadTimeWeaverAwaresetLoadTimeWeaver 
      パラメーター:
      loadTimeWeaver - LoadTimeWeaver インスタンス (非 null)
      関連事項:
    • setResourceLoader

      public void setResourceLoader(ResourceLoader resourceLoader)
      インターフェースからコピーされた説明: ResourceLoaderAware
      このオブジェクトが実行される ResourceLoader を設定します。

      これは ResourcePatternResolver であり、instanceof ResourcePatternResolver で確認できます。ResourcePatternUtils.getResourcePatternResolver メソッドも参照してください。

      通常の Bean プロパティの設定後、InitializingBean の afterPropertiesSet またはカスタム init メソッドのような初期コールバックの前に呼び出されます。ApplicationContextAware の setApplicationContext の前に呼び出されます。

      次で指定:
      インターフェース ResourceLoaderAwaresetResourceLoader 
      パラメーター:
      resourceLoader - このオブジェクトによって使用される ResourceLoader オブジェクト
      関連事項:
    • afterPropertiesSet

      public void afterPropertiesSet() throws PersistenceExceptionEE
      インターフェースからコピーされた説明: InitializingBean
      すべての Bean プロパティを設定し、BeanFactoryAwareApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。

      このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。

      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      オーバーライド:
      クラス AbstractEntityManagerFactoryBeanafterPropertiesSet 
      例外:
      PersistenceExceptionEE
    • createNativeEntityManagerFactory

      protected EntityManagerFactoryEE createNativeEntityManagerFactory() throws PersistenceExceptionEE
      クラスからコピーされた説明: AbstractEntityManagerFactoryBean
      サブクラスは、このメソッドを実装して、getObject() メソッドによって返される EntityManagerFactory を作成する必要があります。
      次で指定:
      クラス AbstractEntityManagerFactoryBeancreateNativeEntityManagerFactory 
      戻り値:
      この 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

      @Nullable public PersistenceUnitInfoEE getPersistenceUnitInfo()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      コンテナー内 API が使用された場合、この EntityManagerFactory の作成に使用された PersistenceUnitInfo を返します。
      次で指定:
      インターフェース EntityManagerFactoryInfogetPersistenceUnitInfo 
      オーバーライド:
      クラス AbstractEntityManagerFactoryBeangetPersistenceUnitInfo 
      戻り値:
      この EntityManagerFactory の作成に使用された PersistenceUnitInfo、またはコンテナー内契約が EntityManagerFactory の構成に使用されなかった場合は null 
    • getPersistenceUnitName

      @Nullable public StringSE getPersistenceUnitName()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      この EntityManagerFactory の作成に使用される永続性ユニットの名前を返します。名前のないデフォルトの場合は null を返します。

      getPersistenceUnitInfo() が null 以外を返す場合、getPersistenceUnitName() の結果は PersistenceUnitInfo.getPersistenceUnitName() によって返される値と等しくなければなりません。

      次で指定:
      インターフェース EntityManagerFactoryInfogetPersistenceUnitName 
      オーバーライド:
      クラス AbstractEntityManagerFactoryBeangetPersistenceUnitName 
      関連事項:
    • getDataSource

      @Nullable public DataSourceSE getDataSource()
      インターフェースからコピーされた説明: EntityManagerFactoryInfo
      この EntityManagerFactory が JDBC 接続を取得する JDBC DataSource を返します。
      次で指定:
      インターフェース EntityManagerFactoryInfogetDataSource 
      オーバーライド:
      クラス AbstractEntityManagerFactoryBeangetDataSource 
      戻り値:
      JDBC DataSource、または不明の場合は null