【Java开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了Java开源代码-AbstractQueryImpl.java的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
//$Id: AbstractQueryImpl.java 9003 2006-01-10 12:48:09Z steveebersole $
package org.hibernate.impl;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.hibernate.CacheMode;
import org.hibernate.FlushMode;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.NonUniqueResultException;
import org.hibernate.PropertyNotFoundException;
import org.hibernate.Query;
import org.hibernate.QueryException;
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.RowSelection;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.engine.TypedValue;
import org.hibernate.engine.query.ParameterMetadata;
import org.hibernate.hql.classic.ParserHelper;
import org.hibernate.property.Getter;
import org.hibernate.proxy.HibernateProxyHelper;
import org.hibernate.type.SerializableType;
import org.hibernate.type.Type;
import org.hibernate.type.TypeFactory;
import org.hibernate.util.ArrayHelper;
import org.hibernate.util.MarkerObject;
import org.hibernate.util.ReflectHelper;
import org.hibernate.util.StringHelper;
/**
* Abstract implementation of the Query interface.
*
* @author Gavin King, Max Andersen
*/
public abstract class AbstractQueryImpl implements Query {
private static final Object UNSET_PARAMETER = new MarkerObject("<unset parameter>");
private static final Object UNSET_TYPE = new MarkerObject("<unset type>");
private final String queryString;
protected final SessionImplementor session;
protected final ParameterMetadata parameterMetadata;
// parameter bind values...
private List values = new ArrayList(4);
private List types = new ArrayList(4);
private Map namedParameters = new HashMap(4);
private Map namedParameterLists = new HashMap(4);
private Object optionalObject;
private Serializable optionalId;
private String optionalEntityName;
private RowSelection selection;
private boolean cacheable;
private String cacheRegion;
private String comment;
private FlushMode flushMode;
private CacheMode cacheMode;
private FlushMode sessionFlushMode;
private CacheMode sessionCacheMode;
private Serializable collectionKey;
private boolean readOnly;
public AbstractQueryImpl(
String queryString,
FlushMode flushMode,
SessionImplementor session,
ParameterMetadata parameterMetadata) {
this.session = session;
this.queryString = queryString;
this.selection = new RowSelection();
this.flushMode = flushMode;
this.cacheMode = null;
this.parameterMetadata = parameterMetadata;
}
public String toString() {
return StringHelper.unqualify( getClass().getName() ) + '(' + queryString + ')';
}
public final String getQueryString() {
return queryString;
}
//TODO: maybe call it getRowSelection() ?
public RowSelection getSelection() {
return selection;
}
public Query setFlushMode(FlushMode flushMode) {
this.flushMode = flushMode;
return this;
}
public Query setCacheMode(CacheMode cacheMode) {
this.cacheMode = cacheMode;
return this;
}
public Query setCacheable(boolean cacheable) {
this.cacheable = cacheable;
return this;
}
public Query setCacheRegion(String cacheRegion) {
if (cacheRegion != null)
this.cacheRegion = cacheRegion.trim();
return this;
}
public Query setComment(String comment) {
this.comment = comment;
return this;
}
public Query setFirstResult(int firstResult) {
selection.setFirstRow( new Integer(firstResult) );
return this;
}
public Query setMaxResults(int maxResults) {
selection.setMaxRows( new Integer(maxResults) );
return this;
}
public Query setTimeout(int timeout) {
selection.setTimeout( new Integer(timeout) );
return this;
}
public Query setFetchSize(int fetchSize) {
selection.setFetchSize( new Integer(fetchSize) );
return this;
}
public Type[] getReturnTypes() throws HibernateException {
return session.getFactory().getReturnTypes( queryString );
}
public String[] getReturnAliases() throws HibernateException {
return session.getFactory().getReturnAliases( queryString );
}
public Query setCollectionKey(Serializable collectionKey) {
this.collectionKey = collectionKey;
return this;
}
public boolean isReadOnly() {
return readOnly;
}
public Query setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
return this;
}
public void setOptionalEntityName(String optionalEntityName) {
this.optionalEntityName = optionalEntityName;
}
public void setOptionalId(Serializable optionalId) {
this.optionalId = optionalId;
}
public void setOptionalObject(Object optionalObject) {
this.optionalObject = optionalObject;
}
SessionImplementor getSession() {
return session;
}
protected abstract Map getLockModes();
// Parameter handling code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Returns a shallow copy of the named parameter value map.
*
* @return Shallow copy of the named parameter value map
*/
protected Map getNamedParams() {
return new HashMap( namedParameters );
}
/**
* Returns an array representing all named parameter names encountered
* during (intial) parsing of the query.
* <p/>
* Note <i>initial</i> here means different things depending on whether
* this is a native-sql query or an HQL/filter query. For native-sql, a
* precursory inspection of the query string is performed specifically to
* locate defined parameters. For HQL/filter queries, this is the
* information returned from the query-translator. This distinction
* holds true for all parameter metadata exposed here.
*
* @return Array of named parameter names.
* @throws HibernateException
*/
public String[] getNamedParameters() throws HibernateException {
return ArrayHelper.toStringArray( parameterMetadata.getNamedParameterNames() );
}
/**
* Does this query contain named parameters?
*
* @return True if the query was found to contain named parameters; false
* otherwise;
*/
public boolean hasNamedParameters() {
return parameterMetadata.getNamedParameterNames().size() > 0;
}
/**
* Retreive the value map for any named parameter list
上一篇:
AbstractProxy.java
下一篇:
经济酒店发展:China''s economy hotel market development strategies