クラス DefaultPersistenceUnitManager

java.lang.ObjectSE
org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
実装されたすべてのインターフェース:
AwareInitializingBeanResourceLoaderAwareLoadTimeWeaverAwarePersistenceUnitManager

public class DefaultPersistenceUnitManager extends ObjectSE implements PersistenceUnitManager, ResourceLoaderAware, LoadTimeWeaverAware, InitializingBean
PersistenceUnitManager インターフェースのデフォルトの実装。LocalContainerEntityManagerFactoryBean によって内部デフォルトとして使用されます。

persistence.xml ファイルの標準 JPA スキャンをサポートし、構成可能なファイルの場所、JDBC DataSource ルックアップ、およびロード時のウィービングを備えています。

通常は PersistenceManagedTypesScanner を使用して構築される PersistenceManagedTypes の状態に基づいて永続化ユニットを構築します。

デフォルトの XML ファイルの場所は classpath*:META-INF/persistence.xml で、クラスパス内の一致するすべてのファイルをスキャンします(JPA 仕様で定義されています)。DataSource 名はデフォルトで JNDI 名として解釈され、ロード時のウィービングは使用できません(永続プロバイダーでウィービングをオフにする必要があります)。

導入:
2.0
作成者:
Juergen Hoeller, Stephane Nicoll
関連事項:
  • フィールドの詳細

    • DEFAULT_PERSISTENCE_XML_LOCATION

      public static final StringSE DEFAULT_PERSISTENCE_XML_LOCATION
      persistence.xml ファイルのデフォルトの場所: "classpath *:META-INF/persistence.xml"。
      関連事項:
    • ORIGINAL_DEFAULT_PERSISTENCE_UNIT_ROOT_LOCATION

      public static final StringSE ORIGINAL_DEFAULT_PERSISTENCE_UNIT_ROOT_LOCATION
      永続性ユニットのルート URL のデフォルトの場所: "classpath:"。クラスパスのルートを示します。
      関連事項:
    • ORIGINAL_DEFAULT_PERSISTENCE_UNIT_NAME

      public static final StringSE ORIGINAL_DEFAULT_PERSISTENCE_UNIT_NAME
      デフォルトの永続性ユニット名。
      関連事項:
    • logger

      protected final Log logger
  • コンストラクターの詳細

    • DefaultPersistenceUnitManager

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

    • setPersistenceXmlLocation

      public void setPersistenceXmlLocation(StringSE persistenceXmlLocation)
      ロードする persistence.xml ファイルの場所を指定します。これらは、Spring リソースの場所および / または場所のパターンとして指定できます。

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

    • setPersistenceXmlLocations

      public void setPersistenceXmlLocations(StringSE... persistenceXmlLocations)
      ロードする persistence.xml ファイルの複数の場所を指定します。これらは、Spring リソースの場所および / または場所のパターンとして指定できます。

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

      パラメーター:
      persistenceXmlLocations - 読み取る persistence.xml ファイルの場所を識別する Spring リソース文字列の配列
    • setDefaultPersistenceUnitRootLocation

      public void setDefaultPersistenceUnitRootLocation(StringSE defaultPersistenceUnitRootLocation)
      ユニット固有の永続性単位根を決定できなかった場合に適用される、デフォルトの永続性単位根の場所を設定します。

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

    • setDefaultPersistenceUnitName

      public void setDefaultPersistenceUnitName(StringSE defaultPersistenceUnitName)
      デフォルトの永続性ユニットの名前がある場合は、それを指定します。デフォルトは "default" です。

      主に、persistence.xml なしでスキャンされた永続性ユニットに適用されます。使用可能ないくつかの永続ユニットからデフォルトユニットを選択する場合にも適用できます。

      関連事項:
    • 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 を設定することを検討してください。

      このようなパッケージスキャンは、Spring で「デフォルトの永続性ユニット」を定義します。これは、persistence.xml から発信される定期的に定義されたユニットの隣に存在する可能性があります。その名前は setDefaultPersistenceUnitName(java.lang.String) によって決定されます。デフォルトでは、単に "default" です。

      注: 通常の JPA スキャンと比較すると、制限がある場合があります。特に、JPA プロバイダーは、persistence.xml によって駆動される場合にのみ、プロバイダー固有のアノテーションのアノテーション付きパッケージを取得できます。4.1 以降、Spring のスキャンは、指定された JpaVendorAdapter(Hibernate など)でサポートされている場合、アノテーション付きパッケージも検出できます。

      これらのパッケージに加えて明示的な mapping resources が指定されていない場合、このマネージャーはクラスパスでデフォルトの META-INF/orm.xml ファイルを検索し、マッピングファイルが persistence.xml ファイルと同じ場所に配置されていない場合はデフォルトユニットのマッピングリソースとして登録します(この場合、標準の JPA のように、そこで定義されている永続性ユニットでのみ使用することを意図していると想定します。

      関連事項:
    • 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 の横に明示的なマッピングリソースが指定されていない場合、このマネージャーはクラスパスでデフォルトの META-INF/orm.xml ファイルを検索し、マッピングファイルが persistence.xml ファイルと同じ場所に配置されていない場合はデフォルトユニットのマッピングリソースとして登録します(標準の JPA のように、そこで定義されている永続性ユニットでのみ使用されることを想定している場合)。

      ここで空の配列 / リストを指定すると、デフォルトの META-INF/orm.xml チェックが抑制されることに注意してください。一方、ここで META-INF/orm.xml を明示的に指定すると、persistence.xml ファイルと同じ場所に配置されている場合でも、そのファイルが登録されます。

      関連事項:
    • setSharedCacheMode

      public void setSharedCacheMode(SharedCacheModeEE sharedCacheMode)
      このマネージャーのすべての永続ユニットに JPA 2.0 共有キャッシュモードを指定し、設定されている場合は persistence.xml の値をオーバーライドします。
      導入:
      4.0
      関連事項:
    • setValidationMode

      public void setValidationMode(ValidationModeEE validationMode)
      このマネージャーのすべての永続ユニットに JPA 2.0 検証モードを指定し、設定されている場合は persistence.xml の値をオーバーライドします。
      導入:
      4.0
      関連事項:
    • setDataSources

      public void setDataSources(MapSE<StringSE,DataSourceSE> dataSources)
      JPA 永続プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSources を指定し、Spring 管理の DataSources に対して persistence.xml のデータソース名を解決します。

      指定されたマップは、特定の DataSource オブジェクトのデータソース名を定義する必要があり、persistence.xml で使用されるデータソース名と一致します。指定しない場合、データソース名は代わりに JNDI 名として解決されます(標準 JPA で定義されています)。

      関連事項:
    • setDataSourceLookup

      public void setDataSourceLookup(@Nullable DataSourceLookup dataSourceLookup)
      永続性プロバイダーに DataSources を提供する JDBC DataSourceLookup を指定し、Spring 管理の DataSource インスタンスに対して persistence.xml のデータソース名を解決します。

      デフォルトは JndiDataSourceLookup で、DataSource 名を JNDI 名として解決します(標準 JPA で定義されています)。DataSource 名を Spring Bean 名に対して解決する場合は、BeanFactoryDataSourceLookup インスタンスを指定します。

      あるいは、"dataSources" プロパティを介して名前から DataSource インスタンスへのマップを渡すことを検討してください。persistence.xml ファイルで DataSource 名がまったく定義されていない場合は、"defaultDataSource" プロパティを介してデフォルトの DataSource を指定します。

      関連事項:
    • getDataSourceLookup

      @Nullable public DataSourceLookup getDataSourceLookup()
      永続性プロバイダーに DataSources を提供する JDBC DataSourceLookup を返し、Spring 管理の DataSource インスタンスに対して persistence.xml のデータソース名を解決します。
    • setDefaultDataSource

      public void setDefaultDataSource(@Nullable DataSourceSE defaultDataSource)
      persistence.xml で何も指定されていない場合に、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。このバリアントは、特別なトランザクション設定がないこと、つまり一般的なリソースローカルを示します。

      JPA では、ここで渡される DataSource は、以前に登録されていない限り、PersistenceProvider に渡される PersistenceUnitInfo の "nonJtaDataSource" として使用されます。

      関連事項:
    • getDefaultDataSource

      @Nullable public DataSourceSE getDefaultDataSource()
      persistence.xml で何も指定されていない場合、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を返します。
    • setDefaultJtaDataSource

      public void setDefaultJtaDataSource(@Nullable DataSourceSE defaultJtaDataSource)
      persistence.xml で何も指定されていない場合に、JPA 永続性プロバイダーがデータベースへのアクセスに使用することになっている JDBC DataSource を指定します。このバリアントは、JTA がトランザクション型として使用されることになっていることを示します。

      JPA では、ここで渡される DataSource は、以前に登録されていない限り、PersistenceProvider に渡される PersistenceUnitInfo の "jtaDataSource" として使用されます。

      関連事項:
    • getDefaultJtaDataSource

      @Nullable public DataSourceSE getDefaultJtaDataSource()
      persistence.xml で何も指定されていない場合、JPA 永続プロバイダーがデータベースへのアクセスに使用することになっている JTA 対応 DataSource を返します。
    • setPersistenceUnitPostProcessors

      public void setPersistenceUnitPostProcessors(@Nullable PersistenceUnitPostProcessor... postProcessors)
      このマネージャーによって解析された各 PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を設定します。

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

    • getPersistenceUnitPostProcessors

      @Nullable public PersistenceUnitPostProcessor[] getPersistenceUnitPostProcessors()
      このマネージャーによって解析された各 PersistenceUnitInfo に適用される PersistenceUnitPostProcessors を返します。
    • setLoadTimeWeaver

      public void setLoadTimeWeaver(@Nullable LoadTimeWeaver loadTimeWeaver)
      JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を指定します。

      LoadTimeWeaver を指定する必要はありません。ほとんどのプロバイダーは、クラスインストルメンテーションなしで機能のサブセットを提供することも、JVM の起動時に指定された独自の VM エージェントで動作することもできます。さらに、Spring のエージェントベースのインストルメンテーションが実行時に利用可能な場合、DefaultPersistenceUnitManager は InstrumentationLoadTimeWeaver にフォールバックします。

      Spring が提供するウィービングオプションに関して、最も重要なものは、JVM の起動時に指定された Spring 固有の(ただし非常に一般的な)VM エージェントを必要とする InstrumentationLoadTimeWeaver と、利用可能な特定の拡張メソッドに基づいて基盤となる ClassLoader と対話する ReflectiveLoadTimeWeaver です。その上で(たとえば、Spring の TomcatInstrumentableClassLoader との対話)。このような共有 LoadTimeWeaver を作成するために context:load-time-weaver XML タグを使用することを検討してください(デフォルトでは環境を自動検出します)。

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

      @Nullable public LoadTimeWeaver getLoadTimeWeaver()
      JPA クラストランスフォーマ契約に従ってクラスインスツルメンテーションに使用する Spring LoadTimeWeaver を返します。
    • 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()
      インターフェースからコピーされた説明: InitializingBean
      すべての Bean プロパティを設定し、BeanFactoryAwareApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。

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

      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
    • preparePersistenceUnitInfos

      public void preparePersistenceUnitInfos()
      このマネージャーの構成に従って PersistenceUnitInfos を準備します。persistence.xml ファイルのスキャン、一致するすべてのファイルの解析、それらの構成と後処理。

      この準備メソッドが呼び出されるまで、PersistenceUnitInfos を取得することはできません。

      関連事項:
    • getPersistenceUnitInfo

      @Nullable protected final MutablePersistenceUnitInfo getPersistenceUnitInfo(StringSE persistenceUnitName)
      処理された永続ユニットのこのマネージャーのキャッシュから指定された PersistenceUnitInfo を返し、キャッシュに保持します(つまり、使用するために「取得」するのではなく、後処理のためにアクセスするだけです)。

      これは postProcessPersistenceUnitInfo(org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo) 実装で使用でき、同じ名前の既存の永続性ユニットを検出し、マージする可能性があります。

      パラメーター:
      persistenceUnitName - 目的の永続性ユニットの名前
      戻り値:
      可変形式の PersistenceUnitInfo、または利用できない場合は null 
    • postProcessPersistenceUnitInfo

      protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui)
      サブクラスが各 PersistenceUnitInfo をカスタマイズできるようにするフックメソッド。

      デフォルトの実装は、登録されているすべての PersistenceUnitPostProcessors に委譲します。ポストプロセッサーを再利用できるようにするには、通常、このマネージャーのサブクラスではなく、エンティティクラスや jar ファイルなどをさらに登録することをお勧めします。

      パラメーター:
      pui - persistence.xml から読み取られた、選択された PersistenceUnitInfo MutablePersistenceUnitInfo として渡されます。
      関連事項:
    • isPersistenceUnitOverrideAllowed

      protected boolean isPersistenceUnitOverrideAllowed()
      同じ名前の永続性ユニットのオーバーライドが許可されているかどうかを返します。

      デフォルトは false です。たとえば、postProcessPersistenceUnitInfo(org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo) がそのケースを処理できる場合、true を返すためにオーバーライドされる可能性があります。

    • obtainDefaultPersistenceUnitInfo

      public PersistenceUnitInfoEE obtainDefaultPersistenceUnitInfo()
      インターフェースからコピーされた説明: PersistenceUnitManager
      このマネージャーからデフォルトの PersistenceUnitInfo を取得します。
      次で指定:
      インターフェース PersistenceUnitManagerobtainDefaultPersistenceUnitInfo 
      戻り値:
      PersistenceUnitInfo (非 null)
    • obtainPersistenceUnitInfo

      public PersistenceUnitInfoEE obtainPersistenceUnitInfo(StringSE persistenceUnitName)
      インターフェースからコピーされた説明: PersistenceUnitManager
      このマネージャーから指定された PersistenceUnitInfo を取得します。
      次で指定:
      インターフェース PersistenceUnitManagerobtainPersistenceUnitInfo 
      パラメーター:
      persistenceUnitName - 目的の永続性ユニットの名前
      戻り値:
      PersistenceUnitInfo (非 null)