blob: fb95af41fdea009a4ce2fadd0b54723c9d057032 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.persistence;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import javax.persistence.FlushModeType;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import javax.persistence.TypedQuery;
import org.apache.openjpa.kernel.Filters;
import org.apache.openjpa.kernel.QueryFlushModes;
import org.apache.openjpa.kernel.QueryHints;
import org.apache.openjpa.kernel.QueryOperations;
/**
* Interface implemented by OpenJPA queries.
*
* @since 0.4.0
* @author Abe White
* @published
*/
public interface OpenJPAQuery<X> extends TypedQuery<X> {
/**
* Hint key for specifying the number of rows to optimize for.
*/
public static final String HINT_RESULT_COUNT = QueryHints.HINT_RESULT_COUNT;
/**
* The owning entity manager.
*/
public OpenJPAEntityManager getEntityManager();
/**
* Query language.
*/
public String getLanguage();
/**
* Query operation type.
*/
public QueryOperationType getOperation();
/**
* Fetch plan for controlling the loading of results.
*/
public FetchPlan getFetchPlan();
/**
* Query string.
*/
public String getQueryString();
/**
* Whether to ignore changes in the current transaction.
*/
public boolean getIgnoreChanges();
/**
* Whether to ignore changes in the current transaction.
*/
public OpenJPAQuery<X>setIgnoreChanges(boolean ignore);
/**
* Return the candidate collection, or <code>null</code> if an
* extent was specified instead of a collection.
*/
public Collection getCandidateCollection();
/**
* Set a collection of candidates.
*/
public OpenJPAQuery<X> setCandidateCollection(Collection coll);
/**
* Query result element type.
*/
public Class getResultClass();
/**
* Query result element type.
*/
public OpenJPAQuery<X> setResultClass(Class type);
/**
* Whether subclasses are included in the query results.
*/
public boolean hasSubclasses();
/**
* Whether subclasses are included in the query results.
*/
public OpenJPAQuery<X> setSubclasses(boolean subs);
/**
* Return the 0-based start index for the returned results.
*/
public int getFirstResult();
/**
* Return the maximum number of results to retrieve.
* or {@link Integer#MAX_VALUE} for no limit.
*/
public int getMaxResults();
/**
* Compile the query.
*/
public OpenJPAQuery<X> compile();
/**
* Whether this query has positional parameters.
*/
public boolean hasPositionalParameters();
/**
* The positional parameters for the query; empty array if none or
* if query uses named parameters.
*/
public Object[] getPositionalParameters();
/**
* The named parameters for the query; empty map if none or
* if query uses positional parameters.
*/
public Map<String, Object> getNamedParameters();
/**
* Set parameters.
*/
public OpenJPAQuery<X> setParameters(Map params);
/**
* Set parameters.
*/
public OpenJPAQuery<X> setParameters(Object... params);
/**
* Close all open query results.
*/
public OpenJPAQuery<X>closeAll();
/**
* Returns a description of the commands that will be sent to
* the datastore in order to execute this query. This will
* typically be in the native query language of the database (e.g., SQL).
*
* @param params the named parameter map for the query invocation
*/
public String[] getDataStoreActions(Map params);
public OpenJPAQuery<X> setMaxResults(int maxResult);
public OpenJPAQuery<X> setFirstResult(int startPosition);
public OpenJPAQuery<X> setHint(String hintName, Object value);
public OpenJPAQuery<X> setParameter(String name, Object value);
public OpenJPAQuery<X> setParameter(String name, Date value, TemporalType temporalType);
public OpenJPAQuery<X> setParameter(String name, Calendar value, TemporalType temporalType);
public OpenJPAQuery<X> setParameter(int position, Object value);
public OpenJPAQuery<X> setParameter(int position, Date value, TemporalType temporalType);
public OpenJPAQuery<X> setParameter(int position, Calendar value, TemporalType temporalType);
/**
* Sets whether the type of user-supplied bind parameter value and the type of target persistent
* property they bind to are checked with strong or weak constraint.
* <br>
* The same can be set via {@link Query#setHint(String, Object) hint} without puncturing standard
* JPA API.
*
* @see Filters#canConvert(Class, Class, boolean)
* @see Filters#convert(Object, Class, boolean)
*
* @param hint a String or Boolean value.
*/
public void setRelaxBindParameterTypeChecking(Object hint);
/**
* Gets whether the type of user-supplied bind parameter value and the type of target persistent
* property they bind to are checked with strong or weak constraint.
*
* @return the booelan state. False by default, i.e. the type of a bind parameter value is checked
* strongly against the target property type.
*/
public boolean getRelaxBindParameterTypeChecking();
public OpenJPAQuery<X> setFlushMode(FlushModeType flushMode);
/**
* Return the current flush mode.
*/
public FlushModeType getFlushMode ();
/**
* @deprecated use the {@link QueryOperationType} instead.
*/
public static final int OP_SELECT = QueryOperations.OP_SELECT;
/**
* @deprecated use the {@link QueryOperationType} instead.
*/
public static final int OP_DELETE = QueryOperations.OP_DELETE;
/**
* @deprecated use the {@link QueryOperationType} instead.
*/
public static final int OP_UPDATE = QueryOperations.OP_DELETE;
/**
* @deprecated use the {@link FlushModeType} enum instead.
*/
public static final int FLUSH_TRUE = QueryFlushModes.FLUSH_TRUE;
/**
* @deprecated use the {@link FlushModeType} enum instead.
*/
public static final int FLUSH_FALSE = QueryFlushModes.FLUSH_FALSE;
/**
* @deprecated use the {@link FlushModeType} enum instead.
*/
public static final int FLUSH_WITH_CONNECTION =
QueryFlushModes.FLUSH_WITH_CONNECTION;
/**
* @deprecated cast to {@link QueryImpl} instead. This
* method pierces the published-API boundary, as does the SPI cast.
*/
public OpenJPAQuery<X> addFilterListener(org.apache.openjpa.kernel.exps.FilterListener listener);
/**
* @deprecated cast to {@link QueryImpl} instead. This
* method pierces the published-API boundary, as does the SPI cast.
*/
public OpenJPAQuery<X> removeFilterListener(org.apache.openjpa.kernel.exps.FilterListener listener);
/**
* @deprecated cast to {@link QueryImpl} instead. This
* method pierces the published-API boundary, as does the SPI cast.
*/
public OpenJPAQuery<X> addAggregateListener(org.apache.openjpa.kernel.exps.AggregateListener listener);
/**
* @deprecated cast to {@link QueryImpl} instead. This
* method pierces the published-API boundary, as does the SPI cast.
*/
public OpenJPAQuery<X> removeAggregateListener(org.apache.openjpa.kernel.exps.AggregateListener listener);
/**
* Gets hints supported by this query.
*
* @since 2.0.0
*/
public Set<String> getSupportedHints();
}