HHH-11186 - Add examples for all Hibernate annotations

Document @QueryHint
This commit is contained in:
Vlad Mihalcea 2017-06-06 08:43:47 +03:00
parent 5e23b7fd02
commit 7ae52fa65e
3 changed files with 31 additions and 5 deletions

View File

@ -536,7 +536,7 @@ The http://docs.oracle.com/javaee/7/api/javax/persistence/PrimaryKeyJoinColumns.
The http://docs.oracle.com/javaee/7/api/javax/persistence/QueryHint.html[`@QueryHint`] annotation is used to specify a JPA provider hint used by a `@NamedQuery` or a `@NamedNativeQuery` annotation.
//TODO: Add example
See the <<chapters/query/hql/HQL.adoc#jpa-read-only-entities-native-example, `@QueryHint`>> section for more info.
[[annotations-jpa-secondarytable]]
==== `@SecondaryTable`

View File

@ -215,6 +215,7 @@ For complete details, see the https://docs.jboss.org/hibernate/orm/{majorMinorVe
====
Query hints here are database query hints.
They are added directly to the generated SQL according to `Dialect#getQueryHintString`.
The JPA notion of query hints, on the other hand, refer to hints that target the provider (Hibernate).
So even though they are called the same, be aware they have a very different purpose.
Also, be aware that Hibernate query hints generally make the application non-portable across databases unless the code adding them first checks the Dialect.
@ -1831,6 +1832,17 @@ include::{extrasdir}/hql-read-only-entities-example.sql[]
As you can see, there is no SQL `UPDATE` being executed.
You can also pass the read-only hint to named queries using the JPA http://docs.oracle.com/javaee/7/api/javax/persistence/QueryHint.html[`@QueryHint`] annotation.
[[jpa-read-only-entities-native-example]]
.Fetching read-only entities using a named query and the read-only hint
====
[source, JAVA, indent=0]
----
include::{modeldir}/Person.java[tags=jpa-read-only-entities-native-example]
----
====
The Hibernate native API offers a `Query#setReadOnly` method, as an alternative to using a JPA query hint:
[[hql-read-only-entities-native-example]]

View File

@ -31,6 +31,7 @@ import javax.persistence.NamedStoredProcedureQuery;
import javax.persistence.OneToMany;
import javax.persistence.OrderColumn;
import javax.persistence.ParameterMode;
import javax.persistence.QueryHint;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.SqlResultSetMappings;
import javax.persistence.StoredProcedureParameter;
@ -151,14 +152,27 @@ import javax.persistence.Version;
//end::sql-multiple-scalar-values-dto-NamedNativeQuery-example[]
})
//tag::hql-examples-domain-model-example[]
@NamedQueries({
//tag::jpql-api-named-query-example[]
@NamedQueries(
@NamedQuery(
name = "get_person_by_name",
query = "select p from Person p where name = :name"
)
)
//end::jpql-api-named-query-example[]
,
// tag::jpa-read-only-entities-native-example[]
@NamedQuery(
name = "get_person_by_name",
query = "select p from Person p where name = :name",
hints = {
@QueryHint(
name = "org.hibernate.readOnly",
value = "true"
)
}
)
//end::jpa-read-only-entities-native-example[]
})
//tag::sql-sp-ref-cursor-oracle-named-query-example[]
@NamedStoredProcedureQueries(
@NamedStoredProcedureQuery(