blob: cd30e92aac5d9b50587d0421f97de98b26b87080 [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.
*/
//
// This source code implements specifications defined by the Java
// Community Process. In order to remain compliant with the specification
// DO NOT add / change / or delete method signatures!
//
package javax.persistence;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Interface used to control query execution.
*
* @version $Rev$ $Date$
*/
public interface Query {
/**
* Execute a SELECT query and return the query results
* as a List.
*
* @return a list of the results
* @throws IllegalStateException if called for a Java
* Persistence query language UPDATE or DELETE statement
* @throws QueryTimeoutException if the query execution exceeds
* the query timeout value set
* @throws TransactionRequiredException if a lock mode has
* been set and there is no transaction
* @throws PessimisticLockException if pessimistic locking
* fails and the transaction is rolled back
* @throws LockTimeoutException if pessimistic locking
* fails and only the statement is rolled back
*/
public List getResultList();
/**
* Execute a SELECT query that returns a single result.
*
* @return the result
* @throws NoResultException if there is no result
* @throws NonUniqueResultException if more than one result
* @throws IllegalStateException if called for a Java
* Persistence query language UPDATE or DELETE statement
* @throws QueryTimeoutException if the query execution exceeds
* the query timeout value set
* @throws TransactionRequiredException if a lock mode has
* been set and there is no transaction
* @throws PessimisticLockException if pessimistic locking
* fails and the transaction is rolled back
* @throws LockTimeoutException if pessimistic locking
* fails and only the statement is rolled back
*/
public Object getSingleResult();
/**
* Execute an update or delete statement.
*
* @return the number of entities updated or deleted
* @throws IllegalStateException if called for a Java
* Persistence query language SELECT statement or for
* a criteria query
* @throws TransactionRequiredException if there is
* no transaction
* @throws QueryTimeoutException if the statement execution
* exceeds the query timeout value set
*/
public int executeUpdate();
/**
* Set the maximum number of results to retrieve.
*
* @param maxResult
* @return the same query instance
* @throws IllegalArgumentException if argument is negative
*/
public Query setMaxResults(int maxResult);
/**
* The maximum number of results the query object was set to
* retrieve. Returns Integer.MAX_VALUE if setMaxResults was not
* applied to the query object.
*
* @return maximum number of results
*/
public int getMaxResults();
/**
* Set the position of the first result to retrieve.
*
* @param start position of the first result, numbered from 0
* @return the same query instance
* @throws IllegalArgumentException if argument is negative
*/
public Query setFirstResult(int startPosition);
/**
* The position of the first result the query object was set to
* retrieve. Returns 0 if setFirstResult was not applied to the
* query object.
*
* @return position of first result
*/
public int getFirstResult();
/**
* Set a query hint.
* If a vendor-specific hint is not recognized, it is silently
* ignored.
* Portable applications should not rely on the standard timeout
* hint. Depending on the database in use and the locking
* mechanisms used by the provider, the hint may or may not
* be observed.
*
* @param hintName
* @param value
* @return the same query instance
* <p/>
* * @throws IllegalArgumentException if the second argument is not
* valid for the implementation
*/
public Query setHint(String hintName, Object value);
/**
* Get the hints and associated values that are in effect for
* the query instance.
*
* @return query hints
*/
public Map<String, Object> getHints();
/**
* Get the names of the hints that are supported for query
* objects. These hints correspond to hints that may be passed
* to the methods of the Query interface that take hints as
* arguments or used with the NamedQuery and NamedNativeQuery
* annotations. These include all standard query hints as well as
* vendor-specific hints supported by the provider. These hints
* may or may not currently be in effect.
*
* @return hints
*/
public Set<String> getSupportedHints();
/**
* Bind an argument to a named parameter.
*
* @param name the parameter name
* @param value
* @return the same query instance
* @throws IllegalArgumentException if parameter name does not
* correspond to parameter in query string
* or argument is of incorrect type
*/
public Query setParameter(String name, Object value);
/**
* Bind an instance of java.util.Date to a named parameter.
*
* @param name
* @param value
* @param temporalType
* @return the same query instance
* @throws IllegalArgumentException if parameter name does not
* correspond to parameter in query string
*/
public Query setParameter(String name, Date value,
TemporalType temporalType);
/**
* Bind an instance of java.util.Calendar to a named parameter.
*
* @param name
* @param value
* @param temporalType
* @return the same query instance
* @throws IllegalArgumentException if parameter name does not
* correspond to parameter in query string
*/
public Query setParameter(String name, Calendar value,
TemporalType temporalType);
/**
* Bind an argument to a positional parameter.
*
* @param position
* @param value
* @return the same query instance
* @throws IllegalArgumentException if position does not
* correspond to positional parameter of query
* or argument is of incorrect type
*/
public Query setParameter(int position, Object value);
/**
* Bind an instance of java.util.Date to a positional parameter.
*
* @param position
* @param value
* @param temporalType
* @return the same query instance
* @throws IllegalArgumentException if position does not
* correspond to positional parameter of query
*/
public Query setParameter(int position, Date value,
TemporalType temporalType);
/**
* Bind an instance of java.util.Calendar to a positional
* parameter.
*
* @param position
* @param value
* @param temporalType
* @return the same query instance
* @throws IllegalArgumentException if position does not
* correspond to positional parameter of query
*/
public Query setParameter(int position, Calendar value,
TemporalType temporalType);
/**
* Get the parameters names and associated values of the
* parameters that are bound for the query instance.
* Returns empty map if no parameters have been bound
* or if the query does not use named parameters.
*
* @return named parameters
*/
public Map<String, Object> getNamedParameters();
/**
* Get the values of the positional parameters
* that are bound for the query instance.
* Positional positions are listed in order of position.
* Returns empty list if no parameters have been bound
* or if the query does not use positional parameters.
*
* @return positional parameters
*/
public List getPositionalParameters();
/**
* Set the flush mode type to be used for the query execution.
* The flush mode type applies to the query regardless of the
* flush mode type in use for the entity manager.
*
* @param flushMode
*/
public Query setFlushMode(FlushModeType flushMode);
/**
* The flush mode in effect for the query execution. If a flush
* mode has not been set for the query object, returns the flush
* mode in effect for the entity manager.
*
* @return flush mode
*/
public FlushModeType getFlushMode();
/**
* Set the lock mode type to be used for the query execution.
*
* @param lockMode
* @throws IllegalStateException if not a Java Persistence
* query language SELECT query or Criteria API query
*/
public Query setLockMode(LockModeType lockMode);
/**
* Get the current lock mode for the query.
*
* @return lock mode
* @throws IllegalStateException if not a Java Persistence
* query language SELECT query or Criteria API query
*/
public LockModeType getLockMode();
/**
* Return an object of the specified type to allow access to the
* provider-specific API. If the provider's Query implementation
* does not support the specified class, the PersistenceException
* is thrown.
*
* @param cls the class of the object to be returned. This is
* normally either the underlying Query implementation class
* or an interface that it implements.
* @return an instance of the specified class
* @throws PersistenceException if the provider does not support
* the call.
*/
public <T> T unwrap(Class<T> cls);
}