All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.boot.SessionFactoryBuilder Maven / Gradle / Ivy

There is a newer version: 7.0.0.Alpha1
Show newest version
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or .
 */
package org.hibernate.boot;

import java.util.Map;
import java.util.function.Supplier;

import org.hibernate.ConnectionReleaseMode;
import org.hibernate.CustomEntityDirtinessStrategy;
import org.hibernate.EntityMode;
import org.hibernate.EntityNameResolver;
import org.hibernate.Interceptor;
import org.hibernate.MultiTenancyStrategy;
import org.hibernate.NullPrecedence;
import org.hibernate.SessionFactory;
import org.hibernate.SessionFactoryObserver;
import org.hibernate.cache.spi.TimestampsCacheFactory;
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
import org.hibernate.dialect.function.SQLFunction;
import org.hibernate.hql.spi.id.MultiTableBulkIdStrategy;
import org.hibernate.jpa.spi.JpaCompliance;
import org.hibernate.loader.BatchFetchStyle;
import org.hibernate.proxy.EntityNotFoundDelegate;
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
import org.hibernate.resource.jdbc.spi.StatementInspector;
import org.hibernate.tuple.entity.EntityTuplizer;
import org.hibernate.tuple.entity.EntityTuplizerFactory;

/**
 * The contract for building a {@link org.hibernate.SessionFactory} given a number of options.
 *
 * @author Steve Ebersole
 * @author Gail Badner
 *
 * @since 5.0
 */
@SuppressWarnings("UnusedReturnValue")
public interface SessionFactoryBuilder {
	/**
	 * Apply a Bean Validation ValidatorFactory to the SessionFactory being built.
	 *
	 * NOTE : De-typed to avoid hard dependency on Bean Validation jar at runtime.
	 *
	 * @param validatorFactory The Bean Validation ValidatorFactory to use
	 *
	 * @return {@code this}, for method chaining
	 */
	SessionFactoryBuilder applyValidatorFactory(Object validatorFactory);

	/**
	 * Apply a CDI BeanManager to the SessionFactory being built.
	 *
	 * NOTE : De-typed to avoid hard dependency on CDI jar at runtime.
	 *
	 * @param beanManager The CDI BeanManager to use
	 *
	 * @return {@code this}, for method chaining
	 */
	SessionFactoryBuilder applyBeanManager(Object beanManager);

	/**
	 * Applies a SessionFactory name.
	 *
	 * @param sessionFactoryName The name to use for the SessionFactory being built
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#SESSION_FACTORY_NAME
	 */
	SessionFactoryBuilder applyName(String sessionFactoryName);

	/**
	 * Applies a SessionFactory name.
	 *
	 * @param isJndiName {@code true} indicates that the name specified in
	 * {@link #applyName} will be used for binding the SessionFactory into JNDI.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#SESSION_FACTORY_NAME_IS_JNDI
	 */
	SessionFactoryBuilder applyNameAsJndiName(boolean isJndiName);

	/**
	 * Applies whether Sessions should be automatically closed at the end of the transaction.
	 *
	 * @param enabled {@code true} indicates they should be auto-closed; {@code false} indicates not.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#AUTO_CLOSE_SESSION
	 */
	SessionFactoryBuilder applyAutoClosing(boolean enabled);

	/**
	 * Applies whether Sessions should be automatically flushed at the end of the transaction.
	 *
	 * @param enabled {@code true} indicates they should be auto-flushed; {@code false} indicates not.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#FLUSH_BEFORE_COMPLETION
	 */
	SessionFactoryBuilder applyAutoFlushing(boolean enabled);

	/**
	 * Applies whether statistics gathering is enabled.
	 *
	 * @param enabled {@code true} indicates that statistics gathering should be enabled; {@code false} indicates not.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#GENERATE_STATISTICS
	 */
	SessionFactoryBuilder applyStatisticsSupport(boolean enabled);

	/**
	 * Names an interceptor to be applied to the SessionFactory, which in turn means it will be used by all
	 * Sessions unless one is explicitly specified in {@link org.hibernate.SessionBuilder#interceptor}
	 *
	 * @param interceptor The interceptor
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#INTERCEPTOR
	 */
	SessionFactoryBuilder applyInterceptor(Interceptor interceptor);

	/**
	 * Names an interceptor Class to be applied to the SessionFactory, which in turn means it will be used by all
	 * Sessions unless one is explicitly specified in {@link org.hibernate.SessionBuilder#interceptor}
	 *
	 * @param statelessInterceptorClass The interceptor class
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#SESSION_SCOPED_INTERCEPTOR
	 */
	SessionFactoryBuilder applyStatelessInterceptor(Class statelessInterceptorClass);

	/**
	 * Names a {@link Supplier} instance which is used to retrieve the interceptor to be applied to the SessionFactory,
	 * which in turn means it will be used by all Sessions unless one is explicitly specified in
	 * {@link org.hibernate.SessionBuilder#interceptor}
	 *
	 * @param statelessInterceptorSupplier {@link Supplier} instance which is used to retrieve the interceptor
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#SESSION_SCOPED_INTERCEPTOR
	 */
	SessionFactoryBuilder applyStatelessInterceptor(Supplier statelessInterceptorSupplier);

	/**
	 * Names a StatementInspector to be applied to the SessionFactory, which in turn means it will be used by all
	 * Sessions unless one is explicitly specified in {@link org.hibernate.SessionBuilder#statementInspector}
	 *
	 * @param statementInspector The StatementInspector
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#STATEMENT_INSPECTOR
	 */
	SessionFactoryBuilder applyStatementInspector(StatementInspector statementInspector);

	/**
	 * Specifies one or more observers to be applied to the SessionFactory.  Can be called multiple times to add
	 * additional observers.
	 *
	 * @param observers The observers to add
	 *
	 * @return {@code this}, for method chaining
	 */
	SessionFactoryBuilder addSessionFactoryObservers(SessionFactoryObserver... observers);

	/**
	 * Specifies a custom entity dirtiness strategy to be applied to the SessionFactory.  See the contract
	 * of {@link org.hibernate.CustomEntityDirtinessStrategy} for details.
	 *
	 * @param strategy The custom strategy to be used.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#CUSTOM_ENTITY_DIRTINESS_STRATEGY
	 */
	SessionFactoryBuilder applyCustomEntityDirtinessStrategy(CustomEntityDirtinessStrategy strategy);

	/**
	 * Specifies one or more entity name resolvers to be applied to the SessionFactory (see the {@link org.hibernate.EntityNameResolver}
	 * contract for more information..  Can be called multiple times to add additional resolvers..
	 *
	 * @param entityNameResolvers The entityNameResolvers to add
	 *
	 * @return {@code this}, for method chaining
	 */
	SessionFactoryBuilder addEntityNameResolver(EntityNameResolver... entityNameResolvers);

	/**
	 * Names the {@link org.hibernate.proxy.EntityNotFoundDelegate} to be applied to the SessionFactory.  EntityNotFoundDelegate is a
	 * strategy that accounts for different exceptions thrown between Hibernate and JPA when an entity cannot be found.
	 *
	 * @param entityNotFoundDelegate The delegate/strategy to use.
	 *
	 * @return {@code this}, for method chaining
	 */
	SessionFactoryBuilder applyEntityNotFoundDelegate(EntityNotFoundDelegate entityNotFoundDelegate);

	/**
	 * Should generated identifiers be "unset" on entities during a rollback?
	 *
	 * @param enabled {@code true} indicates identifiers should be unset; {@code false} indicates not.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#USE_IDENTIFIER_ROLLBACK
	 */
	SessionFactoryBuilder applyIdentifierRollbackSupport(boolean enabled);

	/**
	 * Applies the given entity mode as the default for the SessionFactory.
	 *
	 * @param entityMode The default entity mode to use.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#DEFAULT_ENTITY_MODE
	 *
	 * @deprecated Different entity modes per entity is soon to be removed as a feature.
	 */
	@Deprecated
	SessionFactoryBuilder applyDefaultEntityMode(EntityMode entityMode);

	/**
	 * Should attributes using columns marked as not-null be checked (by Hibernate) for nullness?
	 *
	 * @param enabled {@code true} indicates that Hibernate should perform nullness checking; {@code false} indicates
	 * it should not.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#CHECK_NULLABILITY
	 */
	SessionFactoryBuilder applyNullabilityChecking(boolean enabled);

	/**
	 * Should the application be allowed to initialize uninitialized lazy state outside the bounds of a transaction?
	 *
	 * @param enabled {@code true} indicates initialization outside the transaction should be allowed; {@code false}
	 * indicates it should not.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#ENABLE_LAZY_LOAD_NO_TRANS
	 */
	SessionFactoryBuilder applyLazyInitializationOutsideTransaction(boolean enabled);

	/**
	 * Specify the EntityTuplizerFactory to use.
	 *
	 * @param entityTuplizerFactory The EntityTuplizerFactory to use.
	 *
	 * @return {@code this}, for method chaining
	 */
	SessionFactoryBuilder applyEntityTuplizerFactory(EntityTuplizerFactory entityTuplizerFactory);

	/**
	 * Register the default {@link org.hibernate.tuple.entity.EntityTuplizer} to be applied to the SessionFactory.
	 *
	 * @param entityMode The entity mode that which this tuplizer will be applied.
	 * @param tuplizerClass The custom tuplizer class.
	 *
	 * @return {@code this}, for method chaining
	 */
	SessionFactoryBuilder applyEntityTuplizer(
			EntityMode entityMode,
			Class tuplizerClass);

	/**
	 * How should updates and deletes that span multiple tables be handled?
	 *
	 * @param strategy The strategy for handling multi-table updates and deletes.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#HQL_BULK_ID_STRATEGY
	 */
	SessionFactoryBuilder applyMultiTableBulkIdStrategy(MultiTableBulkIdStrategy strategy);

	SessionFactoryBuilder applyTempTableDdlTransactionHandling(TempTableDdlTransactionHandling handling);

	/**
	 * What style of batching should be used?
	 *
	 * @param style The style to use
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#BATCH_FETCH_STYLE
	 */
	SessionFactoryBuilder applyBatchFetchStyle(BatchFetchStyle style);

	/**
	 * Should entity Loaders be generated immediately?  Or should the creation
	 * be delayed until first need?
	 *
	 * @see org.hibernate.cfg.AvailableSettings#DELAY_ENTITY_LOADER_CREATIONS
	 */
	SessionFactoryBuilder applyDelayedEntityLoaderCreations(boolean delay);

	/**
	 * Allows specifying a default batch-fetch size for all entities and collections
	 * which do not otherwise specify a batch-fetch size.
	 *
	 * @param size The size to use for batch fetching for entities/collections which
	 * do not specify an explicit batch fetch size.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#DEFAULT_BATCH_FETCH_SIZE
	 */
	SessionFactoryBuilder applyDefaultBatchFetchSize(int size);

	/**
	 * Apply a limit to the depth Hibernate will use for outer joins.  Note that this is different than an
	 * overall limit on the number of joins...
	 *
	 * @param depth The depth for limiting joins.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#MAX_FETCH_DEPTH
	 */
	SessionFactoryBuilder applyMaximumFetchDepth(int depth);

	/**
	 * Apply a null precedence (NULLS FIRST, NULLS LAST) to be applied order-by clauses rendered into
	 * SQL queries.
	 *
	 * @param nullPrecedence The default null precedence to use.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#DEFAULT_NULL_ORDERING
	 */
	SessionFactoryBuilder applyDefaultNullPrecedence(NullPrecedence nullPrecedence);

	/**
	 * Apply whether ordering of inserts should be enabled.  This allows more efficient SQL
	 * generation via the use of batching for the inserts; the cost is that the determination of the
	 * ordering is far more inefficient than not ordering.
	 *
	 * @param enabled {@code true} indicates that ordering should be enabled; {@code false} indicates not
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#ORDER_INSERTS
	 */
	SessionFactoryBuilder applyOrderingOfInserts(boolean enabled);

	/**
	 * Apply whether ordering of updates should be enabled.  This allows more efficient SQL
	 * generation via the use of batching for the updates; the cost is that the determination of the
	 * ordering is far more inefficient than not ordering.
	 *
	 * @param enabled {@code true} indicates that ordering should be enabled; {@code false} indicates not
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#ORDER_UPDATES
	 */
	SessionFactoryBuilder applyOrderingOfUpdates(boolean enabled);

	/**
	 * Apply the form of multi-tenancy used by the application
	 *
	 * @param strategy The form of multi-tenancy in use.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#MULTI_TENANT
	 */
	SessionFactoryBuilder applyMultiTenancyStrategy(MultiTenancyStrategy strategy);

	/**
	 * Specifies a strategy for resolving the notion of a "current" tenant-identifier when using multi-tenancy
	 * together with current sessions
	 *
	 * @param resolver The resolution strategy to use.
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#MULTI_TENANT_IDENTIFIER_RESOLVER
	 */
	SessionFactoryBuilder applyCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver resolver);

	/**
	 * If using the built-in Hibernate JTA-based TransactionCoordinator/Builder, should it track JTA
	 * transactions by thread in an attempt to detect timeouts?
	 *
	 * @param enabled {@code true} indicates we should track by thread; {@code false} indicates not
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#JTA_TRACK_BY_THREAD
	 */
	SessionFactoryBuilder applyJtaTrackingByThread(boolean enabled);

	/**
	 * If using the built-in Hibernate JTA-based TransactionCoordinator/Builder, should it prefer to use
	 * {@link javax.transaction.UserTransaction} over {@link javax.transaction.Transaction}?
	 *
	 * @param preferUserTransactions {@code true} indicates we should prefer {@link javax.transaction.UserTransaction};
	 * {@code false} indicates we should prefer {@link javax.transaction.Transaction}
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#PREFER_USER_TRANSACTION
	 */
	SessionFactoryBuilder applyPreferUserTransactions(boolean preferUserTransactions);

	/**
	 * Apply query substitutions to use in HQL queries.  Note, this is a legacy feature and almost always
	 * never needed anymore...
	 *
	 * @param substitutions The substitution map
	 *
	 * @return {@code this}, for method chaining
	 *
	 * @see org.hibernate.cfg.AvailableSettings#QUERY_SUBSTITUTIONS
	 *
	 * @deprecated This is a legacy feature and should never be needed anymore...
	 */
	@Deprecated
	SessionFactoryBuilder applyQuerySubstitutions(Map substitutions);

	/**
	 * Should we strictly adhere to JPA Query Language (JPQL) syntax, or more broadly support
	 * all of Hibernate's superset (HQL)?
	 * 

* Setting this to {@code true} may cause valid HQL to throw an exception because it violates * the JPQL subset. * * @param enabled {@code true} indicates that we should strictly adhere to the JPQL subset; {@code false} * indicates we should accept the broader HQL syntax. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#JPAQL_STRICT_COMPLIANCE * * @deprecated Use {@link #enableJpaQueryCompliance} instead */ @Deprecated SessionFactoryBuilder applyStrictJpaQueryLanguageCompliance(boolean enabled); /** * Should named queries be checked on startup? * * @param enabled {@code true} indicates that they should; {@code false} indicates they should not. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#QUERY_STARTUP_CHECKING */ SessionFactoryBuilder applyNamedQueryCheckingOnStartup(boolean enabled); /** * Should second level caching support be enabled? * * @param enabled {@code true} indicates we should enable the use of second level caching; {@code false} * indicates we should disable the use of second level caching. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_SECOND_LEVEL_CACHE */ SessionFactoryBuilder applySecondLevelCacheSupport(boolean enabled); /** * Should second level query caching support be enabled? * * @param enabled {@code true} indicates we should enable the use of second level query * caching; {@code false} indicates we should disable the use of second level query caching. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_QUERY_CACHE */ SessionFactoryBuilder applyQueryCacheSupport(boolean enabled); /** * Specifies a QueryCacheFactory to use for building query cache handlers. * * @param factory The QueryCacheFactory to use * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#QUERY_CACHE_FACTORY */ SessionFactoryBuilder applyTimestampsCacheFactory(TimestampsCacheFactory factory); /** * Apply a prefix to prepended to all cache region names for this SessionFactory. * * @param prefix The prefix. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#CACHE_REGION_PREFIX */ SessionFactoryBuilder applyCacheRegionPrefix(String prefix); /** * By default, Hibernate will always just push data into the cache without first checking * if that data already exists. For some caches (mainly distributed caches) this can have a * major adverse performance impact. For these caches, it is best to enable this "minimal puts" * feature. *

* Cache integrations also report whether "minimal puts" should be enabled by default. So its is * very rare that users need to set this, generally speaking. * * @param enabled {@code true} indicates Hibernate should first check whether data exists and only * push to the cache if it does not already exist. {@code false} indicates to perform the default * behavior. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_MINIMAL_PUTS * @see org.hibernate.cache.spi.RegionFactory#isMinimalPutsEnabledByDefault() */ SessionFactoryBuilder applyMinimalPutsForCaching(boolean enabled); /** * By default, Hibernate stores data in the cache in its own optimized format. However, * that format is impossible to "read" if browsing the cache. The use of "structured" cache * entries allows the cached data to be read. * * @param enabled {@code true} indicates that structured cache entries (human readable) should be used; * {@code false} indicates that the native entry structure should be used. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_STRUCTURED_CACHE */ SessionFactoryBuilder applyStructuredCacheEntries(boolean enabled); /** * Generally, Hibernate will extract the information from an entity and put that * extracted information into the second-level cache. This is by far the safest way to * second-level cache persistent data. However, there are some cases where it is safe * to cache the entity instance directly. This setting controls whether that is used * in those cases. * * @param enabled {@code true} indicates that applicable entities will be stored into the * second-level cache directly by reference; false indicates that all entities will be stored * via the extraction approach. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_DIRECT_REFERENCE_CACHE_ENTRIES */ SessionFactoryBuilder applyDirectReferenceCaching(boolean enabled); /** * When using bi-directional many-to-one associations and caching the one-to-many side * it is expected that both sides of the association are managed (actually that is true of * all bi-directional associations). However, in this case, if the user forgets to manage the * one-to-many side stale data can be left in the second-level cache. *

* Warning: enabling this will have a performance impact. Hence why it is disabled by default * (for good citizens) and is an opt-in setting. * * @param enabled {@code true} indicates that these collection caches should be evicted automatically. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#AUTO_EVICT_COLLECTION_CACHE */ SessionFactoryBuilder applyAutomaticEvictionOfCollectionCaches(boolean enabled); /** * Specifies the maximum number of statements to batch together in a JDBC batch for * insert, update and delete operations. A non-zero number enables batching, but really * only a number greater than zero will have any effect. If used, a number great than 5 * is suggested. * * @param size The batch size to use. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#STATEMENT_BATCH_SIZE */ SessionFactoryBuilder applyJdbcBatchSize(int size); /** * This setting controls whether versioned entities will be included in JDBC batching. The reason * being that some JDBC drivers have a problems returning "accurate" update counts from batch statements. * This is setting is {@code false} by default. * * @param enabled The batch size to use. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#BATCH_VERSIONED_DATA */ SessionFactoryBuilder applyJdbcBatchingForVersionedEntities(boolean enabled); /** * Should scrollable results be supported in queries? We ask the JDBC driver whether it * supports scrollable result sets as the default for this setting, but some drivers do not * accurately report this via DatabaseMetaData. Also, needed if user is supplying connections * (and so no Connection is available when we bootstrap). * * @param enabled {@code true} to enable this support, {@code false} to disable it * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_SCROLLABLE_RESULTSET */ SessionFactoryBuilder applyScrollableResultsSupport(boolean enabled); /** * Hibernate currently accesses results from the JDBC ResultSet by name. This is known * to be VERY slow on some drivers, especially older Oracle drivers. This setting * allows Hibernate to wrap the ResultSet of the JDBC driver to manage the name->position * resolution itself. * * @param enabled {@code true} indicates Hibernate should wrap result sets; {@code false} indicates * it should not. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#WRAP_RESULT_SETS */ SessionFactoryBuilder applyResultSetsWrapping(boolean enabled); /** * Should JDBC {@link java.sql.PreparedStatement#getGeneratedKeys()} feature be used for * retrieval of *insert-generated* ids? * * @param enabled {@code true} indicates we should use JDBC getGeneratedKeys support; {@code false} * indicates we should not. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_GET_GENERATED_KEYS */ SessionFactoryBuilder applyGetGeneratedKeysSupport(boolean enabled); /** * Apply a fetch size to the JDBC driver for fetching results. * * @param size The fetch saize to be passed to the driver. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_GET_GENERATED_KEYS * @see java.sql.Statement#setFetchSize(int) */ SessionFactoryBuilder applyJdbcFetchSize(int size); /** * Apply the specified handling mode for JDBC connections * * @param connectionHandlingMode The handling mode to apply * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#ACQUIRE_CONNECTIONS * @see org.hibernate.cfg.AvailableSettings#RELEASE_CONNECTIONS * @see org.hibernate.ConnectionAcquisitionMode * @see ConnectionReleaseMode */ SessionFactoryBuilder applyConnectionHandlingMode(PhysicalConnectionHandlingMode connectionHandlingMode); /** * Apply a ConnectionReleaseMode. * * @param connectionReleaseMode The ConnectionReleaseMode to use. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#RELEASE_CONNECTIONS * * @deprecated Use {@link #applyConnectionHandlingMode} instead */ @Deprecated SessionFactoryBuilder applyConnectionReleaseMode(ConnectionReleaseMode connectionReleaseMode); /** * @see org.hibernate.cfg.AvailableSettings#CONNECTION_PROVIDER_DISABLES_AUTOCOMMIT */ default SessionFactoryBuilder applyConnectionProviderDisablesAutoCommit(boolean providerDisablesAutoCommit) { return this; } /** * Should Hibernate apply comments to SQL it generates? * * @param enabled {@code true} indicates comments should be applied; {@code false} indicates not. * * @return {@code this}, for method chaining * * @see org.hibernate.cfg.AvailableSettings#USE_SQL_COMMENTS */ SessionFactoryBuilder applySqlComments(boolean enabled); /** * Apply a SQLFunction to the underlying {@link org.hibernate.dialect.function.SQLFunctionRegistry}. *

* TODO : Ultimately I would like this to move to {@link org.hibernate.boot.MetadataBuilder} in conjunction with allowing mappings to reference SQLFunctions. * today mappings can only name SQL functions directly, not through the SQLFunctionRegistry indirection * * @param registrationName The name to register it under. * @param sqlFunction The SQLFunction impl * * @return {@code this}, for method chaining */ SessionFactoryBuilder applySqlFunction(String registrationName, SQLFunction sqlFunction); SessionFactoryBuilder allowOutOfTransactionUpdateOperations(boolean allow); /** * Should resources held by {@link javax.persistence.EntityManager} instance be released immediately on close? *

* The other option is to release them as part of an after-transaction callback. * */ SessionFactoryBuilder enableReleaseResourcesOnCloseEnabled(boolean enable); /** * @see JpaCompliance#isJpaQueryComplianceEnabled() */ SessionFactoryBuilder enableJpaQueryCompliance(boolean enabled); /** * @see JpaCompliance#isJpaTransactionComplianceEnabled() */ SessionFactoryBuilder enableJpaTransactionCompliance(boolean enabled); /** * @see JpaCompliance#isJpaListComplianceEnabled() */ SessionFactoryBuilder enableJpaListCompliance(boolean enabled); /** * @see JpaCompliance#isJpaClosedComplianceEnabled() */ SessionFactoryBuilder enableJpaClosedCompliance(boolean enabled); /** * Allows unwrapping this builder as another, more specific type. * * @param type * @param * * @return The unwrapped builder. */ T unwrap(Class type); /** * After all options have been set, build the SessionFactory. * * @return The built SessionFactory. */ SessionFactory build(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy