| /******************************************************************************* | |
| * Copyright (c) 2008, 2009 Sun Microsystems. All rights reserved. | |
| * | |
| * This program and the accompanying materials are made available under the | |
| * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
| * which accompanies this distribution. | |
| * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
| * and the Eclipse Distribution License is available at | |
| * http://www.eclipse.org/org/documents/edl-v10.php. | |
| * | |
| * Contributors: | |
| * Linda DeMichiel - Java Persistence 2.0 - Version 2.0 (October 1, 2009) | |
| * Specification available from http://jcp.org/en/jsr/detail?id=317 | |
| * | |
| ******************************************************************************/ | |
| package javax.persistence.criteria; | |
| import java.util.List; | |
| import java.util.Set; | |
| /** | |
| * The <code>CriteriaQuery</code> interface defines functionality that is specific | |
| * to top-level queries. | |
| * | |
| * @param <T> the type of the defined result | |
| * | |
| * @since Java Persistence 2.0 | |
| */ | |
| public interface CriteriaQuery<T> extends AbstractQuery<T> { | |
| /** | |
| * Specify the item that is to be returned in the query result. | |
| * Replaces the previously specified selection(s), if any. | |
| * | |
| * <p> Note: Applications using the string-based API may need to | |
| * specify the type of the select item when it results from | |
| * a get or join operation and the query result type is | |
| * specified. | |
| * | |
| * <pre> | |
| * For example: | |
| * | |
| * CriteriaQuery<String> q = cb.createQuery(String.class); | |
| * Root<Order> order = q.from(Order.class); | |
| * q.select(order.get("shippingAddress").<String>get("state")); | |
| * | |
| * CriteriaQuery<Product> q2 = cb.createQuery(Product.class); | |
| * q2.select(q2.from(Order.class) | |
| * .join("items") | |
| * .<Item,Product>join("product")); | |
| * | |
| * </pre> | |
| * @param selection selection specifying the item that | |
| * is to be returned in the query result | |
| * @return the modified query | |
| * @throws IllegalArgumentException if the selection is | |
| * a compound selection and more than one selection | |
| * item has the same assigned alias | |
| */ | |
| CriteriaQuery<T> select(Selection<? extends T> selection); | |
| /** | |
| * Specify the selection items that are to be returned in the | |
| * query result. | |
| * Replaces the previously specified selection(s), if any. | |
| * | |
| * The type of the result of the query execution depends on | |
| * the specification of the type of the criteria query object | |
| * created as well as the arguments to the multiselect method. | |
| * <p> An argument to the multiselect method must not be a tuple- | |
| * or array-valued compound selection item. | |
| * | |
| * <p>The semantics of this method are as follows: | |
| * <ul> | |
| * <li> | |
| * If the type of the criteria query is | |
| * <code>CriteriaQuery<Tuple></code> (i.e., a criteria | |
| * query object created by either the | |
| * <code>createTupleQuery</code> method or by passing a | |
| * <code>Tuple</code> class argument to the | |
| * <code>createQuery</code> method), a <code>Tuple</code> object | |
| * corresponding to the arguments of the <code>multiselect</code> | |
| * method, in the specified order, will be instantiated and | |
| * returned for each row that results from the query execution. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<X></code> for | |
| * some user-defined class X (i.e., a criteria query object | |
| * created by passing a X class argument to the <code>createQuery</code> | |
| * method), the arguments to the <code>multiselect</code> method will be | |
| * passed to the X constructor and an instance of type X will be | |
| * returned for each row. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<X[]></code> for | |
| * some class X, an instance of type X[] will be returned for | |
| * each row. The elements of the array will correspond to the | |
| * arguments of the <code>multiselect</code> method, in the | |
| * specified order. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<Object></code> | |
| * or if the criteria query was created without specifying a | |
| * type, and only a single argument is passed to the <code>multiselect</code> | |
| * method, an instance of type <code>Object</code> will be returned for | |
| * each row. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<Object></code> | |
| * or if the criteria query was created without specifying a | |
| * type, and more than one argument is passed to the <code>multiselect</code> | |
| * method, an instance of type <code>Object[]</code> will be instantiated | |
| * and returned for each row. The elements of the array will | |
| * correspond to the arguments to the <code> multiselect</code> method, | |
| * in the specified order. | |
| * </ul> | |
| * | |
| * @param selections selection items corresponding to the | |
| * results to be returned by the query | |
| * @return the modified query | |
| * @throws IllegalArgumentException if a selection item is | |
| * not valid or if more than one selection item has | |
| * the same assigned alias | |
| */ | |
| CriteriaQuery<T> multiselect(Selection<?>... selections); | |
| /** | |
| * Specify the selection items that are to be returned in the | |
| * query result. | |
| * Replaces the previously specified selection(s), if any. | |
| * | |
| * <p> The type of the result of the query execution depends on | |
| * the specification of the type of the criteria query object | |
| * created as well as the argument to the <code>multiselect</code> method. | |
| * An element of the list passed to the <code>multiselect</code> method | |
| * must not be a tuple- or array-valued compound selection item. | |
| * | |
| * <p> The semantics of this method are as follows: | |
| * <ul> | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<Tuple></code> | |
| * (i.e., a criteria query object created by either the | |
| * <code>createTupleQuery</code> method or by passing a <code>Tuple</code> class argument | |
| * to the <code>createQuery</code> method), a <code>Tuple</code> object corresponding to | |
| * the elements of the list passed to the <code>multiselect</code> method, | |
| * in the specified order, will be instantiated and returned for each | |
| * row that results from the query execution. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<X></code> for | |
| * some user-defined class X (i.e., a criteria query object | |
| * created by passing a X class argument to the <code>createQuery</code> | |
| * method), the elements of the list passed to the <code>multiselect</code> | |
| * method will be passed to the X constructor and an instance | |
| * of type X will be returned for each row. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<X[]></code> for | |
| * some class X, an instance of type X[] will be returned for | |
| * each row. The elements of the array will correspond to the | |
| * elements of the list passed to the <code>multiselect</code> method, | |
| * in the specified order. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<Object></code> | |
| * or if the criteria query was created without specifying a | |
| * type, and the list passed to the <code>multiselect</code> method contains | |
| * only a single element, an instance of type <code>Object</code> will be | |
| * returned for each row. | |
| * | |
| * <li> If the type of the criteria query is <code>CriteriaQuery<Object></code> | |
| * or if the criteria query was created without specifying a | |
| * type, and the list passed to the <code>multiselect</code> method contains | |
| * more than one element, an instance of type <code>Object[]</code> will be | |
| * instantiated and returned for each row. The elements of the | |
| * array will correspond to the elements of the list passed to | |
| * the <code>multiselect</code> method, in the specified order. | |
| * </ul> | |
| * | |
| * @param selectionList list of selection items corresponding | |
| * to the results to be returned by the query | |
| * @return the modified query | |
| * @throws IllegalArgumentException if a selection item is | |
| * not valid or if more than one selection item has | |
| * the same assigned alias | |
| */ | |
| CriteriaQuery<T> multiselect(List<Selection<?>> selectionList); | |
| /** | |
| * Modify the query to restrict the query result according | |
| * to the specified boolean expression. | |
| * Replaces the previously added restriction(s), if any. | |
| * This method only overrides the return type of the | |
| * corresponding <code>AbstractQuery</code> method. | |
| * @param restriction a simple or compound boolean expression | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> where(Expression<Boolean> restriction); | |
| /** | |
| * Modify the query to restrict the query result according | |
| * to the conjunction of the specified restriction predicates. | |
| * Replaces the previously added restriction(s), if any. | |
| * If no restrictions are specified, any previously added | |
| * restrictions are simply removed. | |
| * This method only overrides the return type of the | |
| * corresponding <code>AbstractQuery</code> method. | |
| * @param restrictions zero or more restriction predicates | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> where(Predicate... restrictions); | |
| /** | |
| * Specify the expressions that are used to form groups over | |
| * the query results. | |
| * Replaces the previous specified grouping expressions, if any. | |
| * If no grouping expressions are specified, any previously | |
| * added grouping expressions are simply removed. | |
| * This method only overrides the return type of the | |
| * corresponding <code>AbstractQuery</code> method. | |
| * @param grouping zero or more grouping expressions | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> groupBy(Expression<?>... grouping); | |
| /** | |
| * Specify the expressions that are used to form groups over | |
| * the query results. | |
| * Replaces the previous specified grouping expressions, if any. | |
| * If no grouping expressions are specified, any previously | |
| * added grouping expressions are simply removed. | |
| * This method only overrides the return type of the | |
| * corresponding <code>AbstractQuery</code> method. | |
| * @param grouping list of zero or more grouping expressions | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> groupBy(List<Expression<?>> grouping); | |
| /** | |
| * Specify a restriction over the groups of the query. | |
| * Replaces the previous having restriction(s), if any. | |
| * This method only overrides the return type of the | |
| * corresponding <code>AbstractQuery</code> method. | |
| * @param restriction a simple or compound boolean expression | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> having(Expression<Boolean> restriction); | |
| /** | |
| * Specify restrictions over the groups of the query | |
| * according the conjunction of the specified restriction | |
| * predicates. | |
| * Replaces the previously added having restriction(s), if any. | |
| * If no restrictions are specified, any previously added | |
| * restrictions are simply removed. | |
| * This method only overrides the return type of the | |
| * corresponding <code>AbstractQuery</code> method. | |
| * @param restrictions zero or more restriction predicates | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> having(Predicate... restrictions); | |
| /** | |
| * Specify the ordering expressions that are used to | |
| * order the query results. | |
| * Replaces the previous ordering expressions, if any. | |
| * If no ordering expressions are specified, the previous | |
| * ordering, if any, is simply removed, and results will | |
| * be returned in no particular order. | |
| * The left-to-right sequence of the ordering expressions | |
| * determines the precedence, whereby the leftmost has highest | |
| * precedence. | |
| * @param o zero or more ordering expressions | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> orderBy(Order... o); | |
| /** | |
| * Specify the ordering expressions that are used to | |
| * order the query results. | |
| * Replaces the previous ordering expressions, if any. | |
| * If no ordering expressions are specified, the previous | |
| * ordering, if any, is simply removed, and results will | |
| * be returned in no particular order. | |
| * The order of the ordering expressions in the list | |
| * determines the precedence, whereby the first element in the | |
| * list has highest precedence. | |
| * @param o list of zero or more ordering expressions | |
| * @return the modified query | |
| */ | |
| CriteriaQuery<T> orderBy(List<Order> o); | |
| /** | |
| * Specify whether duplicate query results will be eliminated. | |
| * A true value will cause duplicates to be eliminated. | |
| * A false value will cause duplicates to be retained. | |
| * If distinct has not been specified, duplicate results must | |
| * be retained. | |
| * This method only overrides the return type of the | |
| * corresponding <code>AbstractQuery</code> method. | |
| * @param distinct boolean value specifying whether duplicate | |
| * results must be eliminated from the query result or | |
| * whether they must be retained | |
| * @return the modified query. | |
| */ | |
| CriteriaQuery<T> distinct(boolean distinct); | |
| /** | |
| * Return the ordering expressions in order of precedence. | |
| * Returns empty list if no ordering expressions have been | |
| * specified. | |
| * Modifications to the list do not affect the query. | |
| * @return the list of ordering expressions | |
| */ | |
| List<Order> getOrderList(); | |
| /** | |
| * Return the parameters of the query. Returns empty set if | |
| * there are no parameters. | |
| * Modifications to the set do not affect the query. | |
| * @return the query parameters | |
| */ | |
| Set<ParameterExpression<?>> getParameters(); | |
| } |