All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.persistence.criteria.Subquery Maven / Gradle / Ivy

package javax.persistence.criteria;

import java.util.List;
import java.util.Set;

/**
 * The Subquery interface defines functionality that is specific to subqueries.
 * 
 * A subquery has an expression as its selection item.
 * 
 * @param 
 *            the type of the selection item.
 */
public interface Subquery extends AbstractQuery, Expression {

	/**
	 * Create a subquery collection join object correlated to a collection join object of the enclosing query.
	 * 
	 * @param parentCollection
	 *            join object of the containing query
	 * @param 
	 *            the source type of the join
	 * @param 
	 *            the element type of the target Collection
	 * @return subquery join
	 */
	 CollectionJoin correlate(CollectionJoin parentCollection);

	/**
	 * Create a subquery join object correlated to a join object of the enclosing query.
	 * 
	 * @param parentJoin
	 *            join object of the containing query
	 * @param 
	 *            the source type of the join
	 * @param 
	 *            the element type of the target Collection
	 * @return subquery join
	 */
	 Join correlate(Join parentJoin);

	/**
	 * Create a subquery list join object correlated to a list join object of the enclosing query.
	 * 
	 * @param parentList
	 *            join object of the containing query
	 * @param 
	 *            the source type of the join
	 * @param 
	 *            the element type of the target Collection
	 * @return subquery join
	 */
	 ListJoin correlate(ListJoin parentList);

	/**
	 * Create a subquery map join object correlated to a map join object of the enclosing query.
	 * 
	 * @param parentMap
	 *            join object of the containing query
	 * @param 
	 *            the source type of the join
	 * @param 
	 *            the type of the target Map key
	 * @param 
	 *            the type of the target Map value
	 * @return subquery join
	 */
	 MapJoin correlate(MapJoin parentMap);

	/**
	 * Create a subquery root correlated to a root of the enclosing query.
	 * 
	 * @param parentRoot
	 *            a root of the containing query
	 * @param 
	 *            the type of the root
	 * @return subquery root
	 */
	 Root correlate(Root parentRoot);

	/**
	 * Create a subquery set join object correlated to a set join object of the enclosing query.
	 * 
	 * @param parentSet
	 *            join object of the containing query
	 * @param 
	 *            the source type of the join
	 * @param 
	 *            the element type of the target Collection
	 * @return subquery join
	 */
	 SetJoin correlate(SetJoin parentSet);

	/**
	 * 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 AbstractQuery method.
	 * 
	 * @param distinct
	 *            boolean value specifying whether duplicate results must be eliminated from the subquery result or whether they must be
	 *            retained
	 * @return the modified subquery.
	 */
	@Override
	Subquery distinct(boolean distinct);

	/**
	 * Return the correlated joins of the subquery (Join objects obtained as a result of the use of the correlate method). Returns empty set
	 * if the subquery has no correlated joins. Modifications to the set do not affect the query.
	 * 
	 * @return the correlated joins of the subquery
	 */
	Set> getCorrelatedJoins();

	/**
	 * Return the query of which this is a subquery.
	 * 
	 * @return the enclosing query or subquery
	 */
	AbstractQuery getParent();

	/**
	 * Return the selection expression.
	 * 
	 * @return the item to be returned in the subquery result
	 */
	@Override
	Expression getSelection();

	/**
	 * Specify the expressions that are used to form groups over the subquery 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 AbstractQuery method.
	 * 
	 * @param grouping
	 *            zero or more grouping expressions
	 * @return the modified subquery
	 */
	@Override
	Subquery groupBy(Expression... grouping);

	/**
	 * Specify the expressions that are used to form groups over the subquery 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 AbstractQuery method.
	 * 
	 * @param grouping
	 *            list of zero or more grouping expressions
	 * @return the modified subquery
	 */
	@Override
	Subquery groupBy(List> grouping);

	/**
	 * Specify a restriction over the groups of the subquery. Replaces the previous having restriction(s), if any. This method only
	 * overrides the return type of the corresponding AbstractQuery method.
	 * 
	 * @param restriction
	 *            a simple or compound boolean expression
	 * @return the modified subquery
	 */
	@Override
	Subquery having(Expression restriction);

	/**
	 * Specify restrictions over the groups of the subquery 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 AbstractQuery method.
	 * 
	 * @param restrictions
	 *            zero or more restriction predicates
	 * @return the modified subquery
	 */
	@Override
	Subquery having(Predicate... restrictions);

	/**
	 * Specify the item that is to be returned as the subquery result. Replaces the previously specified selection, if any.
	 * 
	 * @param expression
	 *            expression specifying the item that is to be returned as the subquery result
	 * @return the modified subquery
	 */
	Subquery select(Expression expression);

	/**
	 * Modify the subquery to restrict the 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 AbstractQuery method.
	 * 
	 * @param restriction
	 *            a simple or compound boolean expression
	 * @return the modified subquery
	 */
	@Override
	Subquery where(Expression restriction);

	/**
	 * Modify the subquery to restrict the 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 AbstractQuery method.
	 * 
	 * @param restrictions
	 *            zero or more restriction predicates
	 * @return the modified subquery
	 */
	@Override
	Subquery where(Predicate... restrictions);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy