Native SQL Queries
You may also express queries in the native SQL dialect of your database. This is useful if you
want to utilize database specific features such as the CONNECT keyword in Oracle.
This also allows for a cleaner migration path from a direct SQL/JDBC based application to
Hibernate.
Creating a SQL based Query
SQL queries are exposed through the same Query interface, just like ordinary
HQL queries. The only difference is the use of Session.createSQLQuery().
The three parameters provided to createSQLQuery() are:
the SQL query string
a table alias name
the persistent class returned by the query
The alias name is used inside the sql string to refer to the properties of the mapped class
(in this case Cat). You may retrieve multiple objects per row by supplying
a String array of alias names and a Class array of
corresponding classes.
Alias and property references
The {cat.*} notation used above is a shorthand for "all properties". You
may even list the properties explicity, but you must let Hibernate provide SQL column aliases
for each property. The placeholders for these column aliases are the property name qualified by
the table alias. In the following example, we retrieve Cats from a different
table (cat_log) to the one declared in the mapping metadata. Notice that we
may even use the property aliases in the where clause.
Note: if you list each property explicitly, you must include all
properties of the class and its subclasses!
Named SQL queries
Named SQL queries may be defined in the mapping document and called in exactly the same way
as a named HQL query.
SELECT {person}.NAME AS {person.name},
{person}.AGE AS {person.age},
{person}.SEX AS {person.sex}
FROM PERSON {person} WHERE {person}.NAME LIKE 'Hiber%'
]]>