org.hibernate.boot.internal.SessionFactoryBuilderImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.boot.internal.SessionFactoryBuilderImpl.java

Source

/*
 * 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 <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */
package org.hibernate.boot.internal;

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.boot.SessionFactoryBuilder;
import org.hibernate.boot.TempTableDdlTransactionHandling;
import org.hibernate.boot.spi.BootstrapContext;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.boot.spi.SessionFactoryBuilderImplementor;
import org.hibernate.boot.spi.SessionFactoryOptions;
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.internal.SessionFactoryImpl;
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;

/**
 * @author Gail Badner
 * @author Steve Ebersole
 */
public class SessionFactoryBuilderImpl implements SessionFactoryBuilderImplementor {
    private final MetadataImplementor metadata;
    private final SessionFactoryOptionsBuilder optionsBuilder;

    public SessionFactoryBuilderImpl(MetadataImplementor metadata, BootstrapContext bootstrapContext) {
        this(metadata, new SessionFactoryOptionsBuilder(metadata.getMetadataBuildingOptions().getServiceRegistry(),
                bootstrapContext));
    }

    public SessionFactoryBuilderImpl(MetadataImplementor metadata, SessionFactoryOptionsBuilder optionsBuilder) {
        this.metadata = metadata;
        this.optionsBuilder = optionsBuilder;
        if (metadata.getSqlFunctionMap() != null) {
            for (Map.Entry<String, SQLFunction> sqlFunctionEntry : metadata.getSqlFunctionMap().entrySet()) {
                applySqlFunction(sqlFunctionEntry.getKey(), sqlFunctionEntry.getValue());
            }
        }
    }

    @Override
    public SessionFactoryBuilder applyBeanManager(Object beanManager) {
        this.optionsBuilder.applyBeanManager(beanManager);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyValidatorFactory(Object validatorFactory) {
        this.optionsBuilder.applyValidatorFactory(validatorFactory);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyName(String sessionFactoryName) {
        this.optionsBuilder.applySessionFactoryName(sessionFactoryName);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyNameAsJndiName(boolean isJndiName) {
        this.optionsBuilder.enableSessionFactoryNameAsJndiName(isJndiName);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyAutoClosing(boolean enabled) {
        this.optionsBuilder.enableSessionAutoClosing(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyAutoFlushing(boolean enabled) {
        this.optionsBuilder.enableSessionAutoFlushing(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyJtaTrackingByThread(boolean enabled) {
        this.optionsBuilder.enableJtaTrackingByThread(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyPreferUserTransactions(boolean preferUserTransactions) {
        this.optionsBuilder.enablePreferUserTransaction(preferUserTransactions);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyStatisticsSupport(boolean enabled) {
        this.optionsBuilder.enableStatisticsSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder addSessionFactoryObservers(SessionFactoryObserver... observers) {
        this.optionsBuilder.addSessionFactoryObservers(observers);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyInterceptor(Interceptor interceptor) {
        this.optionsBuilder.applyInterceptor(interceptor);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyStatelessInterceptor(Class<? extends Interceptor> statelessInterceptorClass) {
        this.optionsBuilder.applyStatelessInterceptor(statelessInterceptorClass);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyStatelessInterceptor(
            Supplier<? extends Interceptor> statelessInterceptorSupplier) {
        this.optionsBuilder.applyStatelessInterceptorSupplier(statelessInterceptorSupplier);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyStatementInspector(StatementInspector statementInspector) {
        this.optionsBuilder.applyStatementInspector(statementInspector);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyCustomEntityDirtinessStrategy(CustomEntityDirtinessStrategy strategy) {
        this.optionsBuilder.applyCustomEntityDirtinessStrategy(strategy);
        return this;
    }

    @Override
    public SessionFactoryBuilder addEntityNameResolver(EntityNameResolver... entityNameResolvers) {
        this.optionsBuilder.addEntityNameResolvers(entityNameResolvers);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyEntityNotFoundDelegate(EntityNotFoundDelegate entityNotFoundDelegate) {
        this.optionsBuilder.applyEntityNotFoundDelegate(entityNotFoundDelegate);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyIdentifierRollbackSupport(boolean enabled) {
        this.optionsBuilder.enableIdentifierRollbackSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyDefaultEntityMode(EntityMode entityMode) {
        this.optionsBuilder.applyDefaultEntityMode(entityMode);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyNullabilityChecking(boolean enabled) {
        this.optionsBuilder.enableNullabilityChecking(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyLazyInitializationOutsideTransaction(boolean enabled) {
        this.optionsBuilder.allowLazyInitializationOutsideTransaction(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyEntityTuplizerFactory(EntityTuplizerFactory entityTuplizerFactory) {
        this.optionsBuilder.applyEntityTuplizerFactory(entityTuplizerFactory);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyEntityTuplizer(EntityMode entityMode,
            Class<? extends EntityTuplizer> tuplizerClass) {
        this.optionsBuilder.applyEntityTuplizer(entityMode, tuplizerClass);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyMultiTableBulkIdStrategy(MultiTableBulkIdStrategy strategy) {
        this.optionsBuilder.applyMultiTableBulkIdStrategy(strategy);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyTempTableDdlTransactionHandling(TempTableDdlTransactionHandling handling) {
        this.optionsBuilder.applyTempTableDdlTransactionHandling(handling);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyBatchFetchStyle(BatchFetchStyle style) {
        this.optionsBuilder.applyBatchFetchStyle(style);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyDelayedEntityLoaderCreations(boolean delay) {
        this.optionsBuilder.applyDelayedEntityLoaderCreations(delay);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyDefaultBatchFetchSize(int size) {
        this.optionsBuilder.applyDefaultBatchFetchSize(size);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyMaximumFetchDepth(int depth) {
        this.optionsBuilder.applyMaximumFetchDepth(depth);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyDefaultNullPrecedence(NullPrecedence nullPrecedence) {
        this.optionsBuilder.applyDefaultNullPrecedence(nullPrecedence);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyOrderingOfInserts(boolean enabled) {
        this.optionsBuilder.enableOrderingOfInserts(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyOrderingOfUpdates(boolean enabled) {
        this.optionsBuilder.enableOrderingOfUpdates(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyMultiTenancyStrategy(MultiTenancyStrategy strategy) {
        this.optionsBuilder.applyMultiTenancyStrategy(strategy);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver resolver) {
        this.optionsBuilder.applyCurrentTenantIdentifierResolver(resolver);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyQuerySubstitutions(Map substitutions) {
        this.optionsBuilder.applyQuerySubstitutions(substitutions);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyNamedQueryCheckingOnStartup(boolean enabled) {
        this.optionsBuilder.enableNamedQueryCheckingOnStartup(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applySecondLevelCacheSupport(boolean enabled) {
        this.optionsBuilder.enableSecondLevelCacheSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyQueryCacheSupport(boolean enabled) {
        this.optionsBuilder.enableQueryCacheSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyTimestampsCacheFactory(TimestampsCacheFactory factory) {
        this.optionsBuilder.applyTimestampsCacheFactory(factory);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyCacheRegionPrefix(String prefix) {
        this.optionsBuilder.applyCacheRegionPrefix(prefix);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyMinimalPutsForCaching(boolean enabled) {
        this.optionsBuilder.enableMinimalPuts(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyStructuredCacheEntries(boolean enabled) {
        this.optionsBuilder.enabledStructuredCacheEntries(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyDirectReferenceCaching(boolean enabled) {
        this.optionsBuilder.allowDirectReferenceCacheEntries(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyAutomaticEvictionOfCollectionCaches(boolean enabled) {
        this.optionsBuilder.enableAutoEvictCollectionCaches(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyJdbcBatchSize(int size) {
        this.optionsBuilder.applyJdbcBatchSize(size);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyJdbcBatchingForVersionedEntities(boolean enabled) {
        this.optionsBuilder.enableJdbcBatchingForVersionedEntities(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyScrollableResultsSupport(boolean enabled) {
        this.optionsBuilder.enableScrollableResultSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyResultSetsWrapping(boolean enabled) {
        this.optionsBuilder.enableResultSetWrappingSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyGetGeneratedKeysSupport(boolean enabled) {
        this.optionsBuilder.enableGeneratedKeysSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyJdbcFetchSize(int size) {
        this.optionsBuilder.applyJdbcFetchSize(size);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyConnectionHandlingMode(
            PhysicalConnectionHandlingMode connectionHandlingMode) {
        this.optionsBuilder.applyConnectionHandlingMode(connectionHandlingMode);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyConnectionReleaseMode(ConnectionReleaseMode connectionReleaseMode) {
        this.optionsBuilder.applyConnectionReleaseMode(connectionReleaseMode);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyConnectionProviderDisablesAutoCommit(boolean providerDisablesAutoCommit) {
        this.optionsBuilder.applyConnectionProviderDisablesAutoCommit(providerDisablesAutoCommit);
        return this;
    }

    @Override
    public SessionFactoryBuilder applySqlComments(boolean enabled) {
        this.optionsBuilder.enableCommentsSupport(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder applySqlFunction(String registrationName, SQLFunction sqlFunction) {
        this.optionsBuilder.applySqlFunction(registrationName, sqlFunction);
        return this;
    }

    @Override
    public SessionFactoryBuilder allowOutOfTransactionUpdateOperations(boolean allow) {
        this.optionsBuilder.allowOutOfTransactionUpdateOperations(allow);
        return this;
    }

    @Override
    public SessionFactoryBuilder enableReleaseResourcesOnCloseEnabled(boolean enable) {
        this.optionsBuilder.enableReleaseResourcesOnClose(enable);
        return this;
    }

    @Override
    public SessionFactoryBuilder applyStrictJpaQueryLanguageCompliance(boolean enabled) {
        this.optionsBuilder.enableStrictJpaQueryLanguageCompliance(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder enableJpaQueryCompliance(boolean enabled) {
        this.optionsBuilder.enableJpaQueryCompliance(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder enableJpaTransactionCompliance(boolean enabled) {
        this.optionsBuilder.enableJpaTransactionCompliance(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder enableJpaListCompliance(boolean enabled) {
        this.optionsBuilder.enableJpaListCompliance(enabled);
        return this;
    }

    @Override
    public SessionFactoryBuilder enableJpaClosedCompliance(boolean enabled) {
        this.optionsBuilder.enableJpaClosedCompliance(enabled);
        return this;
    }

    @Override
    public void disableRefreshDetachedEntity() {
        this.optionsBuilder.disableRefreshDetachedEntity();
    }

    @Override
    public void disableJtaTransactionAccess() {
        this.optionsBuilder.disableJtaTransactionAccess();
    }

    public void enableJdbcStyleParamsZeroBased() {
        this.optionsBuilder.enableJdbcStyleParamsZeroBased();
    }

    @Override
    @SuppressWarnings("unchecked")
    public <T extends SessionFactoryBuilder> T unwrap(Class<T> type) {
        return (T) this;
    }

    @Override
    public SessionFactory build() {
        metadata.validate();
        return new SessionFactoryImpl(metadata, buildSessionFactoryOptions());
    }

    @Override
    public SessionFactoryOptions buildSessionFactoryOptions() {
        return optionsBuilder.buildOptions();
    }

}