org.hibernate.engine.spi.SessionFactoryImplementor.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.engine.spi.SessionFactoryImplementor.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.engine.spi;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.EntityGraph;

import org.hibernate.CustomEntityDirtinessStrategy;
import org.hibernate.EntityNameResolver;
import org.hibernate.HibernateException;
import org.hibernate.Interceptor;
import org.hibernate.MappingException;
import org.hibernate.Metamodel;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.SessionFactoryObserver;
import org.hibernate.boot.spi.SessionFactoryOptions;
import org.hibernate.cache.spi.CacheImplementor;
import org.hibernate.cfg.Settings;
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.function.SQLFunctionRegistry;
import org.hibernate.engine.ResultSetMappingDefinition;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.hibernate.engine.jdbc.spi.SqlExceptionHelper;
import org.hibernate.engine.profile.FetchProfile;
import org.hibernate.engine.query.spi.QueryPlanCache;
import org.hibernate.exception.spi.SQLExceptionConverter;
import org.hibernate.graph.spi.RootGraphImplementor;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.metamodel.spi.MetamodelImplementor;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.proxy.EntityNotFoundDelegate;
import org.hibernate.query.spi.NamedQueryRepository;
import org.hibernate.query.spi.QueryParameterBindingTypeResolver;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.stat.spi.StatisticsImplementor;
import org.hibernate.type.Type;
import org.hibernate.type.TypeResolver;

/**
 * Defines the internal contract between the <tt>SessionFactory</tt> and other parts of
 * Hibernate such as implementors of <tt>Type</tt>.
 *
 * @see org.hibernate.SessionFactory
 * @see org.hibernate.internal.SessionFactoryImpl
 *
 * @author Gavin King
 * @author Steve Ebersole
 */
public interface SessionFactoryImplementor extends Mapping, SessionFactory, QueryParameterBindingTypeResolver {
    /**
     * Get the UUID for this SessionFactory.  The value is generated as a {@link java.util.UUID}, but kept
     * as a String.
     *
     * @return The UUID for this SessionFactory.
     *
     * @see org.hibernate.internal.SessionFactoryRegistry#getSessionFactory
     */
    String getUuid();

    /**
     * Access to the name (if one) assigned to the SessionFactory
     *
     * @return The name for the SessionFactory
     */
    String getName();

    @Override
    SessionBuilderImplementor withOptions();

    /**
     * Get a non-transactional "current" session (used by hibernate-envers)
     */
    Session openTemporarySession() throws HibernateException;

    @Override
    CacheImplementor getCache();

    @Override
    StatisticsImplementor getStatistics();

    /**
     * Access to the ServiceRegistry for this SessionFactory.
     *
     * @return The factory's ServiceRegistry
     */
    ServiceRegistryImplementor getServiceRegistry();

    /**
     * Get the factory scoped interceptor for this factory.
     *
     * @return The factory scope interceptor, or null if none.
     *
     * @deprecated (since 5.2) if access to the SessionFactory-scoped Interceptor is needed, use
     * {@link SessionFactoryOptions#getInterceptor()} instead.  However, generally speaking this access
     * is not needed.
     */
    @Deprecated
    Interceptor getInterceptor();

    /**
     * Access to the cachres of HQL/JPQL and native query plans.
     *
     * @return The query plan cache
     *
     * @deprecated (since 5.2) it will be replaced with the new QueryEngine concept introduced in 6.0
     */
    @Deprecated
    QueryPlanCache getQueryPlanCache();

    /**
     * Provides access to the named query repository
     *
     * @return The repository for named query definitions
     *
     * @deprecated (since 5.2) it will be replaced with the new QueryEngine concept introduced in 6.0
     */
    @Deprecated
    NamedQueryRepository getNamedQueryRepository();

    /**
     * Retrieve fetch profile by name.
     *
     * @param name The name of the profile to retrieve.
     * @return The profile definition
     */
    FetchProfile getFetchProfile(String name);

    /**
     * Retrieve the {@link Type} resolver associated with this factory.
     *
     * @return The type resolver
     *
     * @deprecated (since 5.2) No replacement, access to and handling of Types will be much different in 6.0
     */
    @Deprecated
    TypeResolver getTypeResolver();

    /**
     * Get the identifier generator for the hierarchy
     */
    IdentifierGenerator getIdentifierGenerator(String rootEntityName);

    EntityNotFoundDelegate getEntityNotFoundDelegate();

    SQLFunctionRegistry getSqlFunctionRegistry();

    void addObserver(SessionFactoryObserver observer);

    /**
     * @todo make a Service ?
     */
    CustomEntityDirtinessStrategy getCustomEntityDirtinessStrategy();

    /**
     * @todo make a Service ?
     */
    CurrentTenantIdentifierResolver getCurrentTenantIdentifierResolver();

    /**
     * @deprecated (since 5.2) use {@link #getMetamodel()} -> {@link MetamodelImplementor#getEntityNameResolvers()}
     */
    @Deprecated
    default Iterable<EntityNameResolver> iterateEntityNameResolvers() {
        return getMetamodel().getEntityNameResolvers();
    }

    /**
     * Contract for resolving this SessionFactory on deserialization
     */
    interface DeserializationResolver<T extends SessionFactoryImplementor> extends Serializable {
        T resolve();
    }

    DeserializationResolver getDeserializationResolver();

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // Deprecations

    /**
     * Get the return types of a query
     *
     * @deprecated No replacement.
     */
    @Deprecated
    default Type[] getReturnTypes(String queryString) {
        throw new UnsupportedOperationException(
                "Concept of query return org.hibernate.type.Types is no longer supported");
    }

    /**
     * Get the return aliases of a query
     *
     * @deprecated No replacement.
     */
    @Deprecated
    default String[] getReturnAliases(String queryString) {
        throw new UnsupportedOperationException(
                "Access to of query return aliases via Sessionfactory is no longer supported");
    }

    /**
     * @deprecated (since 5.2) Just use {@link #getStatistics} (with covariant return here as {@link StatisticsImplementor}).
     */
    @Deprecated
    default StatisticsImplementor getStatisticsImplementor() {
        return getStatistics();
    }

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // NamedQueryRepository

    /**
     * @deprecated (since 5.2) Use {@link NamedQueryRepository#getNamedQueryDefinition(java.lang.String)} instead.
     */
    @Deprecated
    default NamedQueryDefinition getNamedQuery(String queryName) {
        return getNamedQueryRepository().getNamedQueryDefinition(queryName);
    }

    /**
     * @deprecated (since 5.2) Use {@link NamedQueryRepository#registerNamedQueryDefinition} instead.
     */
    @Deprecated
    default void registerNamedQueryDefinition(String name, NamedQueryDefinition definition) {
        getNamedQueryRepository().registerNamedQueryDefinition(name, definition);
    }

    /**
     * @deprecated (since 5.2) Use {@link NamedQueryRepository#getNamedSQLQueryDefinition} instead.
     */
    @Deprecated
    default NamedSQLQueryDefinition getNamedSQLQuery(String queryName) {
        return getNamedQueryRepository().getNamedSQLQueryDefinition(queryName);
    }

    /**
     * @deprecated (since 5.2) Use {@link NamedQueryRepository#registerNamedSQLQueryDefinition} instead.
     */
    @Deprecated
    default void registerNamedSQLQueryDefinition(String name, NamedSQLQueryDefinition definition) {
        getNamedQueryRepository().registerNamedSQLQueryDefinition(name, definition);
    }

    /**
     * @deprecated (since 5.2) Use {@link NamedQueryRepository#getResultSetMappingDefinition} instead.
     */
    @Deprecated
    default ResultSetMappingDefinition getResultSetMapping(String name) {
        return getNamedQueryRepository().getResultSetMappingDefinition(name);
    }

    /**
     * Get the JdbcServices.
     *
     * @return the JdbcServices
     */
    JdbcServices getJdbcServices();

    /**
     * Get the SQL dialect.
     * <p/>
     * Shorthand for {@code getJdbcServices().getDialect()}
     *
     * @return The dialect
     *
     * @deprecated (since 5.2) instead, use {@link JdbcServices#getDialect()}
     */
    @Deprecated
    default Dialect getDialect() {
        return getJdbcServices().getDialect();
    }

    /**
     * Retrieves the SQLExceptionConverter in effect for this SessionFactory.
     *
     * @return The SQLExceptionConverter for this SessionFactory.
     *
     * @deprecated since 5.0; use {@link JdbcServices#getSqlExceptionHelper()} ->
     * {@link SqlExceptionHelper#getSqlExceptionConverter()} instead as obtained from {@link #getServiceRegistry()}
     */
    @Deprecated
    default SQLExceptionConverter getSQLExceptionConverter() {
        return getJdbcServices().getSqlExceptionHelper().getSqlExceptionConverter();
    }

    /**
     * Retrieves the SqlExceptionHelper in effect for this SessionFactory.
     *
     * @return The SqlExceptionHelper for this SessionFactory.
     *
     * @deprecated since 5.0; use {@link JdbcServices#getSqlExceptionHelper()} instead as
     * obtained from {@link #getServiceRegistry()}
     */
    @Deprecated
    default SqlExceptionHelper getSQLExceptionHelper() {
        return getJdbcServices().getSqlExceptionHelper();
    }

    /**
     * @deprecated since 5.0; use {@link #getSessionFactoryOptions()} instead
     */
    @Deprecated
    @SuppressWarnings("deprecation")
    Settings getSettings();

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // map these to Metamodel

    @Override
    MetamodelImplementor getMetamodel();

    @Override
    @SuppressWarnings("unchecked")
    default <T> List<EntityGraph<? super T>> findEntityGraphsByType(Class<T> entityClass) {
        return (List) findEntityGraphsByJavaType(entityClass);
    }

    <T> List<RootGraphImplementor<? super T>> findEntityGraphsByJavaType(Class<T> entityClass);

    RootGraphImplementor<?> findEntityGraphByName(String name);

    /**
     * @deprecated (since 5.2) Use {@link MetamodelImplementor#entityPersister(Class)} instead.
     */
    @Deprecated
    default EntityPersister getEntityPersister(String entityName) throws MappingException {
        return getMetamodel().entityPersister(entityName);
    }

    /**
     * @deprecated (since 5.2) Use {@link MetamodelImplementor#entityPersisters} instead.
     */
    @Deprecated
    default Map<String, EntityPersister> getEntityPersisters() {
        return getMetamodel().entityPersisters();
    }

    /**
     * @deprecated (since 5.2) Use {@link MetamodelImplementor#collectionPersister(String)} instead.
     */
    @Deprecated
    default CollectionPersister getCollectionPersister(String role) throws MappingException {
        return getMetamodel().collectionPersister(role);
    }

    /**
     * @deprecated (since 5.2) Use {@link MetamodelImplementor#collectionPersisters} instead.
     */
    @Deprecated
    default Map<String, CollectionPersister> getCollectionPersisters() {
        return getMetamodel().collectionPersisters();
    }

    /**
     * @deprecated (since 5.2) Use {@link MetamodelImplementor#collectionPersisters} instead.
     * Retrieves a set of all the collection roles in which the given entity
     * is a participant, as either an index or an element.
     *
     * @param entityName The entity name for which to get the collection roles.
     * @return set of all the collection roles in which the given entityName participates.
     */
    @Deprecated
    default Set<String> getCollectionRolesByEntityParticipant(String entityName) {
        return getMetamodel().getCollectionRolesByEntityParticipant(entityName);
    }

    /**
     * @deprecated (since 5.2) Use {@link MetamodelImplementor#locateEntityPersister(Class)} instead.
     */
    @Deprecated
    default EntityPersister locateEntityPersister(Class byClass) {
        return getMetamodel().locateEntityPersister(byClass);
    }

    /**
     * @deprecated (since 5.2) Use {@link MetamodelImplementor#locateEntityPersister(String)} instead.
     */
    @Deprecated
    default EntityPersister locateEntityPersister(String byName) {
        return getMetamodel().locateEntityPersister(byName);
    }

    /**
     * Get the names of all persistent classes that implement/extend the given interface/class
     *
     * @deprecated Use {@link Metamodel#getImplementors(java.lang.String)} instead
     */
    @Deprecated
    default String[] getImplementors(String entityName) {
        return getMetamodel().getImplementors(entityName);
    }

    /**
     * Get a class name, using query language imports
     *
     * @deprecated Use {@link Metamodel#getImportedClassName(java.lang.String)} instead
     */
    @Deprecated
    default String getImportedClassName(String name) {
        return getMetamodel().getImportedClassName(name);
    }
}