<?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_sqlquery">
    <title>
        SQL Queries
    </title>
    <indexterm zone="jpa_overview_sqlquery">
        <primary>
            SQL queries
        </primary>
        <seealso>
            Query
        </seealso>
    </indexterm>
    <indexterm>
        <primary>
            Query
        </primary>
        <secondary>
            SQL
        </secondary>
        <see>
            SQL queries
        </see>
    </indexterm>
    <indexterm>
        <primary>
            SQL
        </primary>
        <secondary>
            queries
        </secondary>
        <see>
            SQL queries
        </see>
    </indexterm>
    <indexterm>
        <primary>
            Native
        </primary>
        <secondary>
            queries
        </secondary>
        <see>
            SQL queries
        </see>
    </indexterm>
    <para>
JPQL is a powerful query language, but there are times when it is not enough.
Maybe you're migrating a JDBC application to JPA on a strict deadline, and you
don't have time to translate your existing SQL selects to JPQL. Or maybe a
certain query requires database-specific SQL your JPA implementation doesn't
support. Or maybe your DBA has spent hours crafting the perfect select statement
for a query in your application's critical path. Whatever the reason, SQL
queries can remain an essential part of an application.
    </para>
    <para>
You are probably familiar with executing SQL queries by obtaining a <classname>
java.sql.Connection</classname>, using the JDBC APIs to create a <classname>
Statement</classname>, and executing that <classname>Statement</classname> to
obtain a <classname>ResultSet</classname>. And of course, you are free to
continue using this low-level approach to SQL execution in your JPA
applications. However, JPA also supports executing SQL queries through the
<classname>javax.persistence.Query</classname> interface introduced in
<xref linkend="jpa_overview_query"/>. Using a JPA SQL query, you can
retrieve either persistent objects or projections of column values. The
following sections detail each use.
    </para>
    <section id="jpa_overview_sqlquery_create">
        <title>
            Creating SQL Queries
        </title>
        <indexterm zone="jpa_overview_sqlquery_create">
            <primary>
                SQL queries
            </primary>
            <secondary>
                creating
            </secondary>
        </indexterm>
        <para>
The <classname>EntityManager</classname> has two factory methods suitable for
creating SQL queries:
        </para>
<programlisting>
public Query createNativeQuery(String sqlString, Class resultClass);
public Query createNativeQuery(String sqlString, String resultSetMapping);
</programlisting>
        <para>
The first method is used to create a new <classname>Query</classname> instance
that will return instances of the specified class.
        </para>
        <para>
The second method uses a <literal>SqlResultSetMapping</literal> to determine the
type of object or objects to return. The example below shows these methods in
action.
        </para>
        <example id="jpa_overview_sqlquery_createex">
            <title>
                Creating a SQL Query
            </title>
<programlisting>
EntityManager em = ...;
Query query = em.createNativeQuery("SELECT * FROM MAG", Magazine.class);
processMagazines(query.getResultList());
</programlisting>
        </example>
        <note>
            <para>
            <indexterm>
                <primary>
                    SQL queries
                </primary>
                <secondary>
                    stored procedures
                </secondary>
            </indexterm>
            <indexterm>
                <primary>
                    stored procedures
                </primary>
                <secondary>
                    as queries
                </secondary>
                <seealso>
                    Query
                </seealso>
            </indexterm>
In addition to SELECT statements, OpenJPA supports stored procedure invocations
as SQL queries. OpenJPA will assume any SQL that does not begin with the
<literal>SELECT</literal> keyword (ignoring case) is a stored procedure call,
and invoke it as such at the JDBC level.
            </para>
        </note>
    </section>
    <section id="jpa_overview_sqlquery_obj">
        <title>
            Retrieving Persistent Objects with SQL
        </title>
        <indexterm zone="jpa_overview_sqlquery_obj">
            <primary>
                SQL queries
            </primary>
            <secondary>
                retrieving persistent objects
            </secondary>
        </indexterm>
        <indexterm zone="jpa_overview_sqlquery_obj">
            <primary>
                persistent objects
            </primary>
            <secondary>
                retrieving with SQL
            </secondary>
            <seealso>
                SQL queries
            </seealso>
        </indexterm>
        <para>
When you give a SQL <classname>Query</classname> a candidate class, it will
return persistent instances of that class. At a minimum, your SQL must select
the class' primary key columns, discriminator column (if mapped), and version
column (also if mapped). The JPA runtime uses the values of the primary key
columns to construct each result object's identity, and possibly to match it
with a persistent object already in the <classname>EntityManager</classname>'s
cache. When an object is not already cached, the implementation creates a new
object to represent the current result row. It might use the discriminator
column value to make sure it constructs an object of the correct subclass.
Finally, the query records available version column data for use in optimistic
concurrency checking, should you later change the result object and flush it
back to the database.
        </para>
        <para>
Aside from the primary key, discriminator, and version columns, any columns you
select are used to populate the persistent fields of each result object. JPA
implementations will compete on how effectively they map your selected data to
your persistent instance fields.
        </para>
        <para>
Let's make the discussion above concrete with an example. It uses the following
simple mapping between a class and the database:
        </para>
        <mediaobject>
            <imageobject>
                <!-- PNG image data, 320 x 149 (see README) -->
                <imagedata fileref="img/sqlquery-model.png" width="213px"/>
            </imageobject>
        </mediaobject>
        <example id="jpa_overview_sqlquery_objex">
            <title>
                Retrieving Persistent Objects
            </title>
<programlisting>
Query query = em.createNativeQuery("SELECT ISBN, TITLE, PRICE, "
    + "VERS FROM MAG WHERE PRICE &gt; 5 AND PRICE &lt; 10", Magazine.class);
List&lt;Magazine&gt; results = (List&lt;Magazine&gt;) query.getResultList();
for (Magazine mag : results)
    processMagazine(mag);
</programlisting>
        </example>
        <para>
The query above works as advertised, but isn't very flexible. Let's update it to
take in parameters for the minimum and maximum price, so we can reuse it to find
magazines in any price range:
        </para>
        <example id="jpa_overview_sqlquery_obj_paramex">
            <title>
                SQL Query Parameters
            </title>
<programlisting>
Query query = em.createNativeQuery("SELECT ISBN, TITLE, PRICE, "
    + "VERS FROM MAG WHERE PRICE &gt; ?1 AND PRICE &lt; ?2", Magazine.class);

query.setParameter(1, 5d);
query.setParameter(2, 10d);

List&lt;Magazine&gt; results = (List&lt;Magazine&gt;) query.getResultList();
for (Magazine mag : results)
    processMagazine(mag);
</programlisting>
        </example>
        <para>
        <indexterm>
            <primary>
                SQL queries
            </primary>
            <secondary>
                parameters
            </secondary>
        </indexterm>
        <indexterm>
            <primary>
                parameters
            </primary>
            <secondary>
                in SQL queries
            </secondary>
            <seealso>
                SQL queries
            </seealso>
        </indexterm>
Like JDBC prepared statements, SQL queries represent parameters with question
marks, but are followed by an integer to represent its index.
        </para>
    </section>
</chapter>
