blob: 63537e4d9ed93312660dc98b6c90f751fb20009a [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.criteria;
import javax.persistence.Tuple;
import javax.persistence.criteria.From;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.metamodel.Attribute;
import javax.persistence.metamodel.Metamodel;
/**
* OpenJPA-specific extension to JPA 2.0 Criteria Query Builder API.
*
*
* @author Pinaki Poddar
* @since 2.0.0
*/
public interface OpenJPACriteriaBuilder extends CriteriaBuilder {
/**
* The mnemonic to identify the query language.
*/
public static final String LANG_CRITERIA = "javax.persistence.criteria";
/**
* Create a predicate based upon the attribute values of a given
* "example" entity instance. The predicate is the conjunction
* or disjunction of predicates for subset of attribute of the entity.
* <br>
* All the singular entity attributes (the basic, embedded
* and uni-cardinality relations) that have a non-null or non-default
* value for the example instance and are not an identity or version
* attribute are included. The comparable attributes can be further
* pruned by specifying variable list of attributes for exclusion.
*
* @param example a non-null instance of a persistent entity.
*
* @param style specifies various aspects of comparison such as whether
* non-null attribute values be included, how string-valued attribute be
* compared, whether the individual attribute based predicates are ANDed
* or ORed etc. Can be null to designate default comparison style.
*
* @param excludes list of attributes that are excluded from comparison.
* Can be null.
*
* @return a predicate
*/
public <T> Predicate qbe(From<?, T> from, T example, ComparisonStyle style, Attribute<?,?>... excludes);
/**
* Overloaded with no extra attribute to exclude.
*/
public <T> Predicate qbe(From<?, T> from, T example, ComparisonStyle style);
/**
* Overloaded with default comparison style.
*/
public <T> Predicate qbe(From<?, T> from, T example, Attribute<?,?>... excludes);
/**
* Overloaded with default comparison style and no extra attribute to exclude.
*/
public <T> Predicate qbe(From<?, T> from, T example);
/**
* Create a mutable style to apply on query-by-example.
*/
public ComparisonStyle qbeStyle();
/**
* Gets the metamodel for the managed, persistent domain entities.
*/
public Metamodel getMetamodel();
/**
* Create a <code>CriteriaQuery</code> object.
* @return criteria query object
*/
OpenJPACriteriaQuery<Object> createQuery();
/**
* Create a <code>CriteriaQuery</code> object with the specified result
* type.
* @param resultClass type of the query result
* @return criteria query object
*/
<T> OpenJPACriteriaQuery<T> createQuery(Class<T> resultClass);
/**
* Create a <code>CriteriaQuery</code> object that returns a tuple of
* objects as its result.
* @return criteria query object
*/
OpenJPACriteriaQuery<Tuple> createTupleQuery();
}