<?xml version="1.0" encoding="UTF-8"?>
<!--
 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.
-->
<chapter id="jpa_overview_criteria">
    <title>
        JPA Criteria
    </title>
    <indexterm zone="jpa_overview_criteria">
        <primary>
            JP Criteria
        </primary>
        <seealso>
            JPQL
        </seealso>
    </indexterm>
    <indexterm>
        <primary>
            queries
        </primary>
        <see>
            Query
        </see>
    </indexterm>
    <para>
    JPA 2.0 specification introduces a new API to define queries dynamically
    via construction of an object-based
    <classname>javax.persistence.CriteriaQuery</classname> instance, rather
    than string-based approach used in JPQL (Java Persistence Query Language).
    This dynamic query definition capability, referred as Criteria API, is
    based on the abstract persistent schema of the entities, their embedded
    objects and their relationships. The syntax is designed to construct a
    <emphasis>Query Tree</emphasis> whose nodes represent the semantic query
    elements such as projections, conditional predicates of WHERE clause or
    GROUP BY elements etc.
    </para>

    <section>
    	<title>Constructing a CriteriaQuery</title>
    	<para>
    	The CriteriaBuilder interface is the factory for CriteriaQuery. A
    	CriteriaBuilder is obtained from either an EntityManagerFactory or
    	an EntityManager as follows:
    	<programlisting>
EntityManager em = ... ;
CriteriaBuilder queryBuilder = em.getCriteriaBuilder();
CriteriaQuery qdef = queryBuilder.createQuery();
    	</programlisting>
    	The first step in constructing a query definition is specification of
    	query roots.  Query roots specify the domain objects on which the query
    	is evaluated. Query root is an instance of the Root&lt;T&gt; interface. A
    	query root is added to a CriteriaQuery by
    	<methodname>addRoot(Class c)</methodname> method.
    	<programlisting>
    	Root&lt;Customer&gt; customer = qdef.from(Customer.class);
    	</programlisting>
    	A query domain can be further refined by joining to other domain objects.
    	For example, for the above query definition to operate over customers
    	and their orders, use <methodname>join(String attribute)</methodname>:
		<programlisting>
Root&lt;Order&gt; order = customer.join(customer.get(Customer_.orders));
		</programlisting>
		where Customer_.orders represent a field of canonical metamodel class for Customer.
		These canonical metamodel classes are generated during compilation by processing
		the persistent annotation in the source code of Customer.java.
		</para>
		<para>
		The condition of a query definition is set via
		<methodname>where(Predicate p)</methodname> where the argument
		designates a conditional predicate. Conditional predicates are often
		composed of one or more comparisons between the attribute values of
		the domain objects and some variable. For example, to select the
		Customer whose name is <emphasis>"John Doe"</emphasis> and has
		orders that are not yet delivered, you can build the predicate and set
		it to the query definition as:
		<programlisting>
           qdef.where(customer.get(Customer_.name).equal("John Doe")
               .and(order.get(Order_.status).equal(OrderStatus.DELIVERED).not()));
		</programlisting>
		The <methodname>select()</methodname> method defines the result of the
		query. If left unspecified, the select projection is assumed to be the
		root domain object. However, you can specify the selected projections
		explicitly as a list:
		<programlisting>
            qdef.select(customer.get(Customer_.name), order.get(Order_.status));
		</programlisting>
    	</para>

    	<para>
    	An attribute of a domain object can also be specified by navigating via
		<methodname>get(String attr)</methodname>. The attribute
		<emphasis>should</emphasis> refer
		to a valid persistent property of the receiving domain object, however
		no such validation is enforced during the construction of the query
		definition. All validation is deferred until the query is actually executed.
		On the other hand, using canonical metamodel for path navigate enforces
		compile type checking.
    	</para>
    </section>

    <section>
    <title>Executing a CriteriaQuery</title>
    <para>
    A CriteriaQuery is executed in a similar fashion to a string-based JPQL
    query via the EntityManager and Query interfaces.
    <programlisting>
EntityManager em = ...
Query query = em.createQuery(qdef);
List result = query.getResultList();
    </programlisting>
    </para>
    <para>
    A query definition can use named parameters, and the parameter values are
    set as usual in the Query instance.
    </para>

    <para>
    <ulink url="http://www.ibm.com/developerworks/java/library/j-typesafejpa/">A developerworks article</ulink>
    explains details and further usage of Criteria API and its OpenJPA extensions.
    </para>
    </section>

    <section>
    <title>Extension to Criteria API</title>
    <para>
    Criteria API has provided an alternative means to string-based JPQL to
    execute a query. However, JPA 2.0 specification has not explicitly specified
    any equivalence between a dynamically constructed CriteriaQuery and
    a JPQL string. OpenJPA provides a mechanism to convert a CriteriaQuery to
    an equivalent JPQL query string via the extended OpenJPACriteriaQuery API.
    <programlisting>
public interface OpenJPACriteriaQuery extends CriteriaQuery {
    /**
     * Gets equivalent JPQL String for the given CriteriaQuery.
     */
    public String toCQL();
}
    </programlisting>

    </para>
    </section>

    <section>
       <title>Generation of Canonical MetaModel classes</title>
       <para>
Annotation processing tool generates source code for a metamodel class given
the annotated source code of persistent entity.
This tool is invoked during compilation for JDK6 compiler if OpenJPA and JPA
libraries are specified in the compiler <code>-classpath</code> option <emphasis>and</emphasis>
Annotation processor option <code>-Aopenjpa.metamodel=true</code> is specified.
    <programlisting>
 $ javac -classpath path/to/openjpa-all.jar -Aopenjpa.metamodel=true mypackage/MyEntity.java
    </programlisting>
will generate source code for canonical meta-model class <code>mypackage.MyEntity_</code>.
The source code is generated relative to the directory specified in <code>-s</code> option
of <code>javac</code> compiler and defaulted to the current directory.
      </para>

      <para>
The Annotation Processor recognizes the following options specified in the command-line with <code>-A</code>
(none of them are mandatory).
    <itemizedlist>
        <listitem>
			<para>
              -Aopenjpa.log=TRACE|INFO|WARN|ERROR : The logging level. Default is <code>WARN</code>.
            </para>
        </listitem>
        <listitem>
			<para>
             -Aopenjpa.source=&lt;n&gt; : where &lt;n&gt; denotes the integral number for Java source
             version of the generated code. Default is <code>6</code>.
             </para>
        </listitem>
        <listitem>
			<para>
               -Aopenjpa.naming=class name : fully-qualified name of a class implementing
               <code>org.apache.openjpa.meta.MetaDataFactory</code> that determines
the name of a meta-class given the name of the original persistent Java entity class. Defaults to
<code>org.apache.openjpa.persistence.PersistenceMetaDataFactory</code> which appends an underscore character
(<code>_</code>) to the original Java class name.
             </para>
        </listitem>
        <listitem>
			<para>
               -Aopenjpa.header=&lt;url&gt; : A url whose content will appear as comment header to the generated file(s).
               Recognizes special value <code>ASL</code> for Apache Source License header as comment.
               By default, adds an OpenJPA proprietary text as comment block.
             </para>
        </listitem>
    </itemizedlist>
       </para>
    </section>

</chapter>
