Red Hat Training

A Red Hat training course is available for JBoss Enterprise Application Platform Common Criteria Certification

2.3. Mapping Queries

2.3.Mapping JPAQL/HQL queries. Mapping JPAQL/HQL queries

You can map EJBQL/HQL queries using annotations. @NamedQuery and @NamedQueries can be defined at the class level or in a JPA XML file. However their definitions are global to the session factory/entity manager factory scope. A named query is defined by its name and the actual query string.
<entity-mappings>
    <named-query name="plane.getAll">
        <query>select p from Plane p</query>
    </named-query>
    ...
</entity-mappings>
...

@Entity
@NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date >= :date")
public class Night {
    ...
}

public class MyDao {
    doStuff() {
        Query q = s.getNamedQuery("night.moreRecentThan");
        q.setDate( "date", aMonthAgo );
        List results = q.list();
        ...
    }
    ...
}
You can also provide some hints to a query through an array of QueryHint through a hints attribute.
The availabe Hibernate hints are

Table 2.2. Query hints

hint description
org.hibernate.cacheable Whether the query should interact with the second level cache (default to false)
org.hibernate.cacheRegion Cache region name (default used otherwise)
org.hibernate.timeout Query timeout
org.hibernate.fetchSize resultset fetch size
org.hibernate.flushMode Flush mode used for this query
org.hibernate.cacheMode Cache mode used for this query
org.hibernate.readOnly Entities loaded by this query should be in read only mode or not (default to false)
org.hibernate.comment Query comment added to the generated SQL