Open Source Repository

Home /hibernate/hibernate-3.2.7.ga | Repository Home


org/hibernate/impl/AbstractSessionImpl.java
//$Id: AbstractSessionImpl.java 10018 2006-06-15 05:21:06Z [email protected] $
package org.hibernate.impl;

import org.hibernate.MappingException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.HibernateException;
import org.hibernate.ScrollableResults;
import org.hibernate.SessionException;
import org.hibernate.engine.query.sql.NativeSQLQuerySpecification;
import org.hibernate.engine.NamedQueryDefinition;
import org.hibernate.engine.NamedSQLQueryDefinition;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.query.HQLQueryPlan;
import org.hibernate.engine.query.NativeSQLQueryPlan;

import java.util.List;

/**
 * Functionality common to stateless and stateful sessions
 
 @author Gavin King
 */
public abstract class AbstractSessionImpl implements SessionImplementor {

  protected transient SessionFactoryImpl factory;
  private boolean closed = false;

  protected AbstractSessionImpl(SessionFactoryImpl factory) {
    this.factory = factory;
  }

  public SessionFactoryImplementor getFactory() {
    return factory;
  }

  public boolean isClosed() {
    return closed;
  }

  protected void setClosed() {
    closed = true;
  }

  protected void errorIfClosed() {
    if closed ) {
      throw new SessionException"Session is closed!" );
    }
  }

  public Query getNamedQuery(String queryNamethrows MappingException {
    errorIfClosed();
    NamedQueryDefinition nqd = factory.getNamedQueryqueryName );
    final Query query;
    if nqd != null ) {
      String queryString = nqd.getQueryString();
      query = new QueryImpl(
          queryString,
              nqd.getFlushMode(),
              this,
              getHQLQueryPlanqueryString, false ).getParameterMetadata()
      );
      query.setComment"named HQL query " + queryName );
    }
    else {
      NamedSQLQueryDefinition nsqlqd = factory.getNamedSQLQueryqueryName );
      if nsqlqd==null ) {
        throw new MappingException"Named query not known: " + queryName );
      }
      query = new SQLQueryImpl(
          nsqlqd,
              this,
              factory.getQueryPlanCache().getSQLParameterMetadatansqlqd.getQueryString() )
      );
      query.setComment"named native SQL query " + queryName );
      nqd = nsqlqd;
    }
    initQueryquery, nqd );
    return query;
  }

  public Query getNamedSQLQuery(String queryNamethrows MappingException {
    errorIfClosed();
    NamedSQLQueryDefinition nsqlqd = factory.getNamedSQLQueryqueryName );
    if nsqlqd==null ) {
      throw new MappingException"Named SQL query not known: " + queryName );
    }
    Query query = new SQLQueryImpl(
        nsqlqd,
            this,
            factory.getQueryPlanCache().getSQLParameterMetadatansqlqd.getQueryString() )
    );
    query.setComment"named native SQL query " + queryName );
    initQueryquery, nsqlqd );
    return query;
  }

  private void initQuery(Query query, NamedQueryDefinition nqd) {
    query.setCacheablenqd.isCacheable() );
    query.setCacheRegionnqd.getCacheRegion() );
    if nqd.getTimeout()!=null query.setTimeoutnqd.getTimeout().intValue() );
    if nqd.getFetchSize()!=null query.setFetchSizenqd.getFetchSize().intValue() );
    if nqd.getCacheMode() != null query.setCacheModenqd.getCacheMode() );
    query.setReadOnlynqd.isReadOnly() );
    if nqd.getComment() != null query.setCommentnqd.getComment() );
  }

  public Query createQuery(String queryString) {
    errorIfClosed();
    QueryImpl query = new QueryImpl(
        queryString,
            this,
            getHQLQueryPlanqueryString, false ).getParameterMetadata()
    );
    query.setCommentqueryString );
    return query;
  }

  public SQLQuery createSQLQuery(String sql) {
    errorIfClosed();
    SQLQueryImpl query = new SQLQueryImpl(
        sql,
            this,
            factory.getQueryPlanCache().getSQLParameterMetadatasql )
    );
    query.setComment"dynamic native SQL query" );
    return query;
  }

  protected HQLQueryPlan getHQLQueryPlan(String query, boolean shallowthrows HibernateException {
    return factory.getQueryPlanCache().getHQLQueryPlanquery, shallow, getEnabledFilters() );
  }

  protected NativeSQLQueryPlan getNativeSQLQueryPlan(NativeSQLQuerySpecification specthrows HibernateException {
    return factory.getQueryPlanCache().getNativeSQLQueryPlanspec );
  }

  public List list(NativeSQLQuerySpecification spec, QueryParameters queryParameters)
      throws HibernateException {
    return listCustomQuerygetNativeSQLQueryPlanspec ).getCustomQuery(), queryParameters );
  }

  public ScrollableResults scroll(NativeSQLQuerySpecification spec, QueryParameters queryParameters)
      throws HibernateException {
    return scrollCustomQuerygetNativeSQLQueryPlanspec ).getCustomQuery(), queryParameters );
  }

}