Subversion Repositories WebE

Rev

View as "text/plain" | Blame | Last modification | View Log | RSS feed

1
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
 * indicated by the @author tags or express copyright attribution
 * statements applied by the authors.  All third-party contributions are
 * distributed under license by Red Hat Middleware LLC.
 *
 * This copyrighted material is made available to anyone wishing to use, modify,
 * copy, or redistribute it subject to the terms and conditions of the GNU
 * Lesser General Public License, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution; if not, write to:
 * Free Software Foundation, Inc.
 * 51 Franklin Street, Fifth Floor
 * Boston, MA  02110-1301  USA
 *
 */

package org.hibernate;

import java.io.Serializable;
import java.sql.Connection;
import java.util.Map;
import java.util.Set;

import javax.naming.Referenceable;

import org.hibernate.metadata.ClassMetadata;
import org.hibernate.metadata.CollectionMetadata;
import org.hibernate.stat.Statistics;
import org.hibernate.engine.FilterDefinition;

/**
 * Creates <tt>Session</tt>s. Usually an application has a single <tt>SessionFactory</tt>.
 * Threads servicing client requests obtain <tt>Session</tt>s from the factory.<br>
 * <br>
 * Implementors must be threadsafe.<br>
 * <br>
 * <tt>SessionFactory</tt>s are immutable. The behaviour of a <tt>SessionFactory</tt> is
 * controlled by properties supplied at configuration time. These properties are defined
 * on <tt>Environment</tt>.
 *
 * @see Session
 * @see org.hibernate.cfg.Environment
 * @see org.hibernate.cfg.Configuration
 * @see org.hibernate.connection.ConnectionProvider
 * @see org.hibernate.transaction.TransactionFactory
 * @author Gavin King
 */

public interface SessionFactory extends Referenceable, Serializable {

        /**
         * Open a <tt>Session</tt> on the given connection.
         * <p>
         * Note that the second-level cache will be disabled if you
         * supply a JDBC connection. Hibernate will not be able to track
         * any statements you might have executed in the same transaction.
         * Consider implementing your own <tt>ConnectionProvider</tt>.
         *
         * @param connection a connection provided by the application.
         * @return Session
         */

        public org.hibernate.classic.Session openSession(Connection connection);

        /**
         * Create database connection and open a <tt>Session</tt> on it, specifying an
         * interceptor.
         *
         * @param interceptor a session-scoped interceptor
         * @return Session
         * @throws HibernateException
         */

        public org.hibernate.classic.Session openSession(Interceptor interceptor) throws HibernateException;

        /**
         * Open a <tt>Session</tt> on the given connection, specifying an interceptor.
         * <p>
         * Note that the second-level cache will be disabled if you
         * supply a JDBC connection. Hibernate will not be able to track
         * any statements you might have executed in the same transaction.
         * Consider implementing your own <tt>ConnectionProvider</tt>.
         *
         * @param connection a connection provided by the application.
         * @param interceptor a session-scoped interceptor
         * @return Session
         */

        public org.hibernate.classic.Session openSession(Connection connection, Interceptor interceptor);

        /**
         * Create database connection and open a <tt>Session</tt> on it.
         *
         * @return Session
         * @throws HibernateException
         */

        public org.hibernate.classic.Session openSession() throws HibernateException;

        /**
         * Obtains the current session.  The definition of what exactly "current"
         * means controlled by the {@link org.hibernate.context.CurrentSessionContext} impl configured
         * for use.
         * <p/>
         * Note that for backwards compatibility, if a {@link org.hibernate.context.CurrentSessionContext}
         * is not configured but a JTA {@link org.hibernate.transaction.TransactionManagerLookup}
         * is configured this will default to the {@link org.hibernate.context.JTASessionContext}
         * impl.
         *
         * @return The current session.
         * @throws HibernateException Indicates an issue locating a suitable current session.
         */

        public org.hibernate.classic.Session getCurrentSession() throws HibernateException;

        /**
         * Get the <tt>ClassMetadata</tt> associated with the given entity class
         *
         * @see org.hibernate.metadata.ClassMetadata
         */

        public ClassMetadata getClassMetadata(Class persistentClass) throws HibernateException;

        /**
         * Get the <tt>ClassMetadata</tt> associated with the given entity name
         *
         * @see org.hibernate.metadata.ClassMetadata
         * @since 3.0
         */

        public ClassMetadata getClassMetadata(String entityName) throws HibernateException;

        /**
         * Get the <tt>CollectionMetadata</tt> associated with the named collection role
         *
         * @see org.hibernate.metadata.CollectionMetadata
         */

        public CollectionMetadata getCollectionMetadata(String roleName) throws HibernateException;


        /**
         * Get all <tt>ClassMetadata</tt> as a <tt>Map</tt> from entityname <tt>String</tt>
         * to metadata object
         *
         * @see org.hibernate.metadata.ClassMetadata
         * @return a map from <tt>String</tt> an entity name to <tt>ClassMetaData</tt>
         * @since 3.0 changed key from <tt>Class</tt> to <tt>String</tt>
         */

        public Map getAllClassMetadata() throws HibernateException;

        /**
         * Get all <tt>CollectionMetadata</tt> as a <tt>Map</tt> from role name
         * to metadata object
         *
         * @see org.hibernate.metadata.CollectionMetadata
         * @return a map from <tt>String</tt> to <tt>CollectionMetadata</tt>
         */

        public Map getAllCollectionMetadata() throws HibernateException;

        /**
         * Get the statistics for this session factory
         */

        public Statistics getStatistics();

        /**
         * Destroy this <tt>SessionFactory</tt> and release all resources (caches,
         * connection pools, etc). It is the responsibility of the application
         * to ensure that there are no open <tt>Session</tt>s before calling
         * <tt>close()</tt>.
         */

        public void close() throws HibernateException;

        /**
         * Was this <tt>SessionFactory</tt> already closed?
         */

        public boolean isClosed();

        /**
         * Evict all entries from the second-level cache. This method occurs outside
         * of any transaction; it performs an immediate "hard" remove, so does not respect
         * any transaction isolation semantics of the usage strategy. Use with care.
         */

        public void evict(Class persistentClass) throws HibernateException;
        /**
         * Evict an entry from the second-level  cache. This method occurs outside
         * of any transaction; it performs an immediate "hard" remove, so does not respect
         * any transaction isolation semantics of the usage strategy. Use with care.
         */

        public void evict(Class persistentClass, Serializable id) throws HibernateException;
        /**
         * Evict all entries from the second-level cache. This method occurs outside
         * of any transaction; it performs an immediate "hard" remove, so does not respect
         * any transaction isolation semantics of the usage strategy. Use with care.
         */

        public void evictEntity(String entityName) throws HibernateException;
        /**
         * Evict an entry from the second-level  cache. This method occurs outside
         * of any transaction; it performs an immediate "hard" remove, so does not respect
         * any transaction isolation semantics of the usage strategy. Use with care.
         */

        public void evictEntity(String entityName, Serializable id) throws HibernateException;
        /**
         * Evict all entries from the second-level cache. This method occurs outside
         * of any transaction; it performs an immediate "hard" remove, so does not respect
         * any transaction isolation semantics of the usage strategy. Use with care.
         */

        public void evictCollection(String roleName) throws HibernateException;
        /**
         * Evict an entry from the second-level cache. This method occurs outside
         * of any transaction; it performs an immediate "hard" remove, so does not respect
         * any transaction isolation semantics of the usage strategy. Use with care.
         */

        public void evictCollection(String roleName, Serializable id) throws HibernateException;

        /**
         * Evict any query result sets cached in the default query cache region.
         */

        public void evictQueries() throws HibernateException;
        /**
         * Evict any query result sets cached in the named query cache region.
         */

        public void evictQueries(String cacheRegion) throws HibernateException;
        /**
         * Get a new stateless session.
         */

        public StatelessSession openStatelessSession();
        /**
         * Get a new stateless session for the given JDBC connection.
         */

        public StatelessSession openStatelessSession(Connection connection);

        /**
         * Obtain a set of the names of all filters defined on this SessionFactory.
         *
         * @return The set of filter names.
         */

        public Set getDefinedFilterNames();

        /**
         * Obtain the definition of a filter by name.
         *
         * @param filterName The name of the filter for which to obtain the definition.
         * @return The filter definition.
         * @throws HibernateException If no filter defined with the given name.
         */

        public FilterDefinition getFilterDefinition(String filterName) throws HibernateException;
}