public class LocalSessionFactoryBean extends HibernateExceptionTranslator implements FactoryBean<SessionFactory>, ResourceLoaderAware, BeanFactoryAware, InitializingBean, DisposableBean
SessionFactory
を作成する FactoryBean
。これは、Spring アプリケーションコンテキストで共有 Hibernate SessionFactory を設定する通常の方法です。次に、SessionFactory を依存性注入を介してデータアクセスオブジェクトに渡すことができます。Spring 5.1 以降、Hibernate 5.0/5.1 および 5.2/5.3 と互換性があります。Hibernate 5.3 でセットアップされた LocalSessionFactoryBean
は、一般的な JPA の目的で LocalContainerEntityManagerFactoryBean
の直接の代替手段です。特に Hibernate 5.3 では、Hibernate SessionFactory
は JPA EntityManagerFactory
インターフェースもネイティブに公開し、Hibernate BeanContainer
統合はそのまま登録されます。HibernateTransactionManager
と組み合わせると、当然、同じトランザクション内で JPA アクセスコードとネイティブ Hibernate アクセスコードを混在させることができます。
コンストラクターと説明 |
---|
LocalSessionFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
protected SessionFactory | buildSessionFactory(LocalSessionFactoryBuilder sfb) サブクラスはこのメソッドをオーバーライドして、SessionFactory インスタンスのカスタム初期化を実行し、この LocalSessionFactoryBean によって準備された特定の Configuration オブジェクトを介してインスタンスを作成できます。 |
void | destroy() Bean の破棄時に、包含 BeanFactory によって呼び出されます。 |
Configuration | getConfiguration() SessionFactory の構築に使用される Hibernate 構成オブジェクトを返します。 |
PropertiesSE | getHibernateProperties() Hibernate プロパティを返します(ある場合)。 |
org.hibernate.boot.MetadataSources | getMetadataSources() 使用する Hibernate MetadataSources を決定します。 |
SessionFactory | getObject() このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。 |
ClassSE<?> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
ResourceLoader | getResourceLoader() Hibernate メタデータに使用する Spring ResourceLoader を決定します。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
void | setAnnotatedClasses(ClassSE<?>... annotatedClasses) この Hibernate SessionFactory に登録するアノテーション付きエンティティクラスを指定します。 |
void | setAnnotatedPackages(StringSE... annotatedPackages) パッケージレベルのアノテーションメタデータが読み取られるアノテーション付きパッケージの名前を指定します。 |
void | setBeanFactory(BeanFactory beanFactory) 含まれている BeanFactory を受け入れ、可能な場合は対応する Hibernate BeanContainer 統合を登録します。 |
void | setBootstrapExecutor(AsyncTaskExecutor bootstrapExecutor) バックグラウンドブートストラップ用の非同期エグゼキューターを指定します。 |
void | setCacheableMappingLocations(Resource... cacheableMappingLocations) キャッシュ可能な Hibernate マッピングファイルの場所を、たとえば Web アプリリソース "/WEB-INF/mapping/example.hbm.xml" として設定します。 |
void | setCacheRegionFactory(RegionFactory cacheRegionFactory) Hibernate RegionFactory を SessionFactory に使用するように設定します。 |
void | setConfigLocation(Resource configLocation) 単一の Hibernate XML 構成ファイルの場所を、たとえばクラスパスリソース "classpath:hibernate.cfg.xml" として設定します。 |
void | setConfigLocations(Resource... configLocations) 複数の Hibernate XML 構成ファイルの場所を、たとえばクラスパスリソース "classpath:hibernate.cfg.xml、classpath:extension.cfg.xml" として設定します。 |
void | setCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver currentTenantIdentifierResolver) SessionFactory に渡される CurrentTenantIdentifierResolver を設定します。 |
void | setDataSource(DataSourceSE dataSource) SessionFactory で使用する DataSource を設定します。 |
void | setEntityInterceptor(Interceptor entityInterceptor) データベースへの書き込みおよびデータベースからの読み取りを行う前に、プロパティ値をインスペクションおよび変更できる Hibernate エンティティインターセプターを設定します。 |
void | setEntityTypeFilters(TypeFilter... entityTypeFilters) エンティティクラスの Spring ベースのスキャン用にカスタム型フィルターを指定します。 |
void | setHibernateIntegrators(Integrator... hibernateIntegrators) 適用する 1 つ以上の Hibernate Integrator 実装を指定します。 |
void | setHibernateProperties(PropertiesSE hibernateProperties) "hibernate.dialect" などの Hibernate プロパティを設定します。 |
void | setImplicitNamingStrategy(org.hibernate.boot.model.naming.ImplicitNamingStrategy implicitNamingStrategy) SessionFactory の Hibernate 5 ImplicitNamingStrategy を設定します。 |
void | setJtaTransactionManager(ObjectSE jtaTransactionManager) Spring JtaTransactionManager または JTA TransactionManager SE を Hibernate で使用するように設定します(ある場合)。 |
void | setMappingDirectoryLocations(Resource... mappingDirectoryLocations) "WEB-INF/mappings" のように、Hibernate マッピングリソースを含むディレクトリの場所を設定します。 |
void | setMappingJarLocations(Resource... mappingJarLocations) "WEB-INF/lib/example.hbm.jar" のように、Hibernate マッピングリソースを含む jar ファイルの場所を設定します。 |
void | setMappingLocations(Resource... mappingLocations) Hibernate マッピングファイルの場所を、たとえばクラスパスリソース "classpath:example.hbm.xml" として設定します。 |
void | setMappingResources(StringSE... mappingResources) "example.hbm.xml" や "mypackage/example.hbm.xml" など、クラスパスにある Hibernate マッピングリソースを設定します。 |
void | setMetadataSources(org.hibernate.boot.MetadataSources metadataSources) 使用する Hibernate MetadataSources サービスを指定します(例: |
void | setMultiTenantConnectionProvider(org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider multiTenantConnectionProvider) SessionFactory に渡される MultiTenantConnectionProvider を設定します。 |
void | setPackagesToScan(StringSE... packagesToScan) クラスパスでエンティティクラスの自動検出を検索するパッケージを指定します。 |
void | setPhysicalNamingStrategy(org.hibernate.boot.model.naming.PhysicalNamingStrategy physicalNamingStrategy) SessionFactory の Hibernate 5 PhysicalNamingStrategy を設定します。 |
void | setResourceLoader(ResourceLoader resourceLoader) Hibernate メタデータに使用する Spring ResourceLoader を指定します。 |
convertHibernateAccessException, setJdbcExceptionTranslator, translateExceptionIfPossible
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setDataSource(DataSourceSE dataSource)
これが設定されている場合、Hibernate 設定では、無意味な二重構成を回避するために接続プロバイダーを定義しないでください。
public void setConfigLocation(Resource configLocation)
メモ: 必要なすべてのプロパティとマッピングリソースがこの Bean を介してローカルで指定されている場合は省略できます。
public void setConfigLocations(Resource... configLocations)
メモ: 必要なすべてのプロパティとマッピングリソースがこの Bean を介してローカルで指定されている場合は省略できます。
public void setMappingResources(StringSE... mappingResources)
Hibernate XML 構成ファイルからマッピングに追加するか、すべてのマッピングをローカルで指定するために使用できます。
public void setMappingLocations(Resource... mappingLocations)
Hibernate XML 構成ファイルからマッピングに追加するか、すべてのマッピングをローカルで指定するために使用できます。
public void setCacheableMappingLocations(Resource... cacheableMappingLocations)
Hibernate XML 構成ファイルからマッピングに追加するか、すべてのマッピングをローカルで指定するために使用できます。
public void setMappingJarLocations(Resource... mappingJarLocations)
Hibernate XML 構成ファイルからマッピングに追加するか、すべてのマッピングをローカルで指定するために使用できます。
public void setMappingDirectoryLocations(Resource... mappingDirectoryLocations)
Hibernate XML 構成ファイルからマッピングに追加するか、すべてのマッピングをローカルで指定するために使用できます。
public void setEntityInterceptor(Interceptor entityInterceptor)
public void setImplicitNamingStrategy(org.hibernate.boot.model.naming.ImplicitNamingStrategy implicitNamingStrategy)
ImplicitNamingStrategy
を設定します。public void setPhysicalNamingStrategy(org.hibernate.boot.model.naming.PhysicalNamingStrategy physicalNamingStrategy)
PhysicalNamingStrategy
を設定します。public void setJtaTransactionManager(ObjectSE jtaTransactionManager)
JtaTransactionManager
または JTA TransactionManager
SE(存在する場合)を設定します。JtaPlatform
を暗黙的にセットアップします。public void setCacheRegionFactory(RegionFactory cacheRegionFactory)
RegionFactory
を SessionFactory に使用するように設定します。Spring 管理の RegionFactory
インスタンスを使用できます。メモ: これが設定されている場合、Hibernate 設定では、意味のない二重構成を避けるためにキャッシュプロバイダーを定義しないでください。
public void setMultiTenantConnectionProvider(org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider multiTenantConnectionProvider)
MultiTenantConnectionProvider
を設定します。public void setCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver currentTenantIdentifierResolver)
CurrentTenantIdentifierResolver
を設定します。public void setHibernateProperties(PropertiesSE hibernateProperties)
メモ: Spring 駆動トランザクションを使用する場合は、ここでトランザクションプロバイダーを指定しないでください。また、接続プロバイダーの設定を省略し、代わりに Spring セットの DataSource を使用することをお勧めします。
public PropertiesSE getHibernateProperties()
public void setEntityTypeFilters(TypeFilter... entityTypeFilters)
デフォルトでは、指定されたすべてのパッケージで @javax.persistence.Entity
、@javax.persistence.Embeddable
または @javax.persistence.MappedSuperclass
のアノテーションが付けられたクラスを検索します。
public void setAnnotatedClasses(ClassSE<?>... annotatedClasses)
public void setAnnotatedPackages(StringSE... annotatedPackages)
public void setPackagesToScan(StringSE... packagesToScan)
ClassPathBeanDefinitionScanner
)に類似しています。public void setBootstrapExecutor(AsyncTaskExecutor bootstrapExecutor)
SimpleAsyncTaskExecutor
。SessionFactory
の初期化はバックグラウンドブートストラップモードに切り替わり、Hibernate のブートストラップが完了するのを待つのではなく、SessionFactory
プロキシがインジェクションの目的で直ちに返されます。ただし、SessionFactory
メソッドの最初の実際の呼び出しは、Hibernate のブートストラップが完了するまでブロックされます(それまでに準備ができていない場合)。最大限の利益を得るには、メタデータのイントロスペクションの目的であっても、関連する Bean の init メソッドでの初期の SessionFactory
呼び出しを避けてください。
public void setHibernateIntegrators(Integrator... hibernateIntegrators)
Integrator
実装を指定します。 これは、内部で構築された MetadataSources
インスタンスにのみ適用されます。setMetadataSources(org.hibernate.boot.MetadataSources)
は、外部で構築された MetadataSources
に適用されるインテグレーターを使用して、このような設定を効果的にオーバーライドします。
setMetadataSources(org.hibernate.boot.MetadataSources)
, BootstrapServiceRegistryBuilder.applyIntegrator(org.hibernate.integrator.spi.Integrator)
public void setMetadataSources(org.hibernate.boot.MetadataSources metadataSources)
MetadataSources
サービスを指定します(既存のサービスを再利用するなど)。カスタム Hibernate ブートストラップ ServiceRegistry
も含まれている可能性があります。MetadataSources.MetadataSources(ServiceRegistry)
, BootstrapServiceRegistryBuilder.build()
public org.hibernate.boot.MetadataSources getMetadataSources()
MetadataSources
を決定します。SessionFactory
ビルドに使用される MetadataSources
インスタンスを初期化および事前入力するために外部から呼び出すこともできます。
null
)LocalSessionFactoryBuilder.LocalSessionFactoryBuilder(DataSource, ResourceLoader, MetadataSources)
public void setResourceLoader(ResourceLoader resourceLoader)
ResourceLoader
を指定します。ResourceLoaderAware
の setResourceLoader
resourceLoader
- 使用する ResourceLoader (非 null
)ResourcePatternResolver
, ResourcePatternUtils.getResourcePatternResolver(org.springframework.core.io.ResourceLoader)
public ResourceLoader getResourceLoader()
ResourceLoader
を決定します。null
)public void setBeanFactory(BeanFactory beanFactory)
BeanFactory
を受け入れ、可能な場合は対応する Hibernate BeanContainer
統合を登録します。これには、クラスパスに Spring ConfigurableListableBeanFactory
および Hibernate 5.3 以上が必要です。BeanFactoryAware
の setBeanFactory
beanFactory
- 所有 BeanFactory(非 null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。SpringBeanContainer
, LocalSessionFactoryBuilder.setBeanContainer(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
public void afterPropertiesSet() throws IOExceptionSE
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
IOExceptionSE
protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb)
デフォルトの実装では、LocalSessionFactoryBuilder の buildSessionFactory が呼び出されます。カスタム実装では、特定の方法でインスタンスを準備したり (カスタム ServiceRegistry を適用するなど)、カスタム SessionFactoryImpl サブクラスを使用したりすることができます。
sfb
- この LocalSessionFactoryBean によって準備された LocalSessionFactoryBuilderLocalSessionFactoryBuilder.buildSessionFactory(org.springframework.core.task.AsyncTaskExecutor)
public final Configuration getConfiguration()
IllegalStateExceptionSE
- Configuration オブジェクトがまだ初期化されていない場合 @Nullable public SessionFactory getObject()
FactoryBean
BeanFactory
と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。
この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException
をスローします。
Spring 2.0 以降、FactoryBeans は null
オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。
FactoryBean<SessionFactory>
の getObject
null
にすることができます)FactoryBeanNotInitializedException
public ClassSE<?> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<SessionFactory>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
public boolean isSingleton()
FactoryBean
FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? 注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject()
から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true
を返さないでください。
FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 : false
を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean
インターフェースの実装は、SmartFactoryBean.isPrototype()
メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean
実装は、isSingleton()
実装が false
を返す場合、常に独立したインスタンスを返すと単純に想定されます。
FactoryBean
は通常シングルトンインスタンスを管理するため、デフォルトの実装では true
が返されます。
FactoryBean<SessionFactory>
の isSingleton
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()
public void destroy()
DisposableBean
BeanFactory
によって呼び出されます。DisposableBean
の destroy