Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Hibernate, Relational Persistence for Idiomatic Java
   *
   * Copyright (c) 2010-2011, Red Hat, Inc. and/or its affiliates 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, Inc.
   *
   * 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.search.query.hibernate.impl;
 
 import java.util.List;
 import java.util.Map;
 
 
Implementation of org.hibernate.search.FullTextQuery.

Author(s):
Emmanuel Bernard <emmanuel@hibernate.org>
Hardy Ferentschik <hardy@hibernate.org>
 
 public class FullTextQueryImpl extends AbstractQueryImpl implements FullTextQuery {
 
 	private static final Log log = LoggerFactory.make();
 	private Criteria criteria;
 	private int fetchSize = 1;
 	private final HSQuery hSearchQuery;

Constructs a FullTextQueryImpl instance.

Parameters:
query The Lucene query.
classes Array of classes (must be immutable) used to filter the results to the given class types.
session Access to the Hibernate session.
parameterMetadata Additional query metadata.
 
 	public FullTextQueryImpl(org.apache.lucene.search.Query queryClass<?>[] classesSessionImplementor session,
 							 ParameterMetadata parameterMetadata) {
 		//TODO handle flushMode
 		superquery.toString(), nullsessionparameterMetadata );
 		//TODO get a factory on searchFactoryImplementor
 				.luceneQueryquery )
 				.targetedEntities( Arrays.asListclasses ) );
	}

	public FullTextQuery setSort(Sort sort) {
		.sortsort );
		return this;
	}

	public FullTextQuery setFilter(Filter filter) {
		.filterfilter );
		return this;
	}

Return an iterator on the results. Retrieve the object one by one (initialize it during the next() operation)
	public Iterator iterate() throws HibernateException {
		//implement an iterator which keep the id/class for each hit and get the object on demand
		//cause I can't keep the searcher and hence the hit opened. I don't have any hook to know when the
		//user stops using it
		//scrollable is better in this area
		final List<EntityInfoentityInfos = .queryEntityInfos();
		//stop timeout manager, the iterator pace is in the user's hands
		//TODO is this noloader optimization really needed?
		final Iterator<Objectiterator;
		if ( entityInfos.size() == 0 ) {
			iterator = new IteratorImplentityInfos );
			return iterator;
		}
		else {
			Loader loader = getLoader();
			iterator = new IteratorImplentityInfosloader );
		}
		return iterator;
	}


Decide which object loader to use depending on the targeted entities. If there is only a single entity targeted a QueryLoader can be used which will only execute a single query to load the entities. If more than one entity is targeted a MultiClassesQueryLoader must be used. We also have to consider whether projections or Criteria are used.

Returns:
The loader instance to use to load the results of the query.
	private Loader getLoader() {
		ObjectLoaderBuilder loaderBuilder = new ObjectLoaderBuilder()
		if ( .getProjectedFields() != null ) {
			return getProjectionLoaderloaderBuilder );
		}
		else {
			return loaderBuilder.buildLoader();
		}
	}
	private Loader getProjectionLoader(ObjectLoaderBuilder loaderBuilder) {
		loader.init(
				loaderBuilder,
		);
		return loader;
	}
		//keep the searcher open until the resultset is closed
		final DocumentExtractor documentExtractor = .queryDocumentExtractor();
		//stop timeout manager, the iterator pace is in the user's hands
		Loader loader = getLoader();
				documentExtractor,
				loader,
		);
	}
	public ScrollableResults scroll(ScrollMode scrollModethrows HibernateException {
		//TODO think about this scrollmode
		return scroll();
	}
	public List list() throws HibernateException {
		final List<EntityInfoentityInfos = .queryEntityInfos();
		Loader loader = getLoader();
		List list = loader.loadentityInfos.toArraynew EntityInfo[entityInfos.size()] ) );
		//no need to timeoutManager.isTimedOut from this point, we don't do anything intensive
		if (  == null || loader instanceof ProjectionLoader ) {
			//stay consistent with transformTuple which can only be executed during a projection
			//nothing to do
		}
		else {
			list = .transformListlist );
		}
		return list;
	}
	public Explanation explain(int documentId) {
		return .explaindocumentId );
	}
	public int getResultSize() {
		if ( getLoader().isSizeSafe() ) {
		}
		else {
		}
	}
		this. = criteria;
		return this;
	}
	public FullTextQuery setProjection(String... fields) {
		return this;
	}
	public FullTextQuery setSpatialParametersPoint centerString fieldName ) {
		.setSpatialParameterscenterfieldName );
		return this;
	}
	public FullTextQuery setSpatialParameters(double latitudedouble longitudeString fieldName) {
		setSpatialParameters(  Point.fromDegreeslatitudelongitude ), fieldName );
		return this;
	}
	public FullTextQuery setFirstResult(int firstResult) {
		.firstResultfirstResult );
		return this;
	}
	public FullTextQuery setMaxResults(int maxResults) {
		.maxResultsmaxResults );
		return this;
	}
	public FullTextQuery setFetchSize(int fetchSize) {
		super.setFetchSizefetchSize );
		if ( fetchSize <= 0 ) {
			throw new IllegalArgumentException"'fetch size' parameter less than or equals to 0" );
		}
		this. = fetchSize;
		return this;
	}
	public Query setLockOptions(LockOptions lockOptions) {
		throw new UnsupportedOperationException"Lock options are not implemented in Hibernate Search queries" );
	}
		super.setResultTransformertransformer );
		this. = transformer;
		return this;
	}
	@SuppressWarnings("unchecked")
	public <T> T unwrap(Class<T> type) {
		if ( type == org.apache.lucene.search.Query.class ) {
		}
		throw new IllegalArgumentException"Cannot unwrap " + type.getName() );
	}
		throw new UnsupportedOperationException"Lock options are not implemented in Hibernate Search queries" );
	}
	public int executeUpdate() throws HibernateException {
		throw new UnsupportedOperationException"executeUpdate is not supported in Hibernate Search queries" );
	}
	public Query setLockMode(String aliasLockMode lockMode) {
		throw new UnsupportedOperationException"Lock options are not implemented in Hibernate Search queries" );
	}
	protected Map getLockModes() {
		throw new UnsupportedOperationException"Lock options are not implemented in Hibernate Search queries" );
	}
	}
	public void disableFullTextFilter(String name) {
	}
	}
	public FullTextQuery setTimeout(int timeout) {
		return setTimeouttimeout. );
	}
	public FullTextQuery setTimeout(long timeoutTimeUnit timeUnit) {
		super.setTimeout( (inttimeUnit.toSecondstimeout ) );
		.getTimeoutManager().setTimeouttimeouttimeUnit );
		return this;
	}
	public FullTextQuery limitExecutionTimeTo(long timeoutTimeUnit timeUnit) {
		.getTimeoutManager().setTimeouttimeouttimeUnit );
		return this;
	}
	public boolean hasPartialResults() {
	}
		this. = lookupMethod;
		this. = retrievalMethod;
		return this;
	}
	}
	private static final Loader noLoader = new Loader() {
		public void init(Session session,
						 SearchFactoryImplementor searchFactoryImplementor,
						 ObjectsInitializer objectsInitializer,
						 TimeoutManager timeoutManager) {
		}
		public Object load(EntityInfo entityInfo) {
			throw new UnsupportedOperationException"noLoader should not be used" );
		}
		public Object loadWithoutTiming(EntityInfo entityInfo) {
			throw new UnsupportedOperationException"noLoader should not be used" );
		}
		public List load(EntityInfo... entityInfos) {
			throw new UnsupportedOperationException"noLoader should not be used" );
		}
		public boolean isSizeSafe() {
			return false;
		}
	};
			return new QueryTimeoutExceptionmessage, (SQLExceptionnullluceneQuery.toString() );
		}
	};
New to GrepCode? Check out our FAQ X