fix a couple of minor errors in doc
This commit is contained in:
parent
1188c6e628
commit
99e43537c1
|
@ -1590,9 +1590,9 @@ include::{sourcedir}/HQLTest.java[tags=hql-explicit-join-jpql-on-example]
|
||||||
====
|
====
|
||||||
|
|
||||||
[[hql-explicit-fetch-join]]
|
[[hql-explicit-fetch-join]]
|
||||||
==== `fetch join` for association fetching
|
==== `join fetch` for association fetching
|
||||||
|
|
||||||
A `fetch join` overrides the laziness of a given association, specifying that the association should be fetched with a SQL join.
|
A _fetch join_ overrides the laziness of a given association, specifying that the association should be fetched with a SQL join.
|
||||||
The join may be an inner or outer join.
|
The join may be an inner or outer join.
|
||||||
|
|
||||||
* A `join fetch`, or, more explicitly, `inner join fetch`, only returns base entities with an associated entity.
|
* A `join fetch`, or, more explicitly, `inner join fetch`, only returns base entities with an associated entity.
|
||||||
|
@ -1601,7 +1601,7 @@ The join may be an inner or outer join.
|
||||||
[IMPORTANT]
|
[IMPORTANT]
|
||||||
====
|
====
|
||||||
This is one of the most important features of Hibernate.
|
This is one of the most important features of Hibernate.
|
||||||
To achieve acceptable performance with HQL, you'll need to use `fetch join` quite often.
|
To achieve acceptable performance with HQL, you'll need to use `join fetch` quite often.
|
||||||
Without it, you'll quickly run into the dreaded "n+1 selects" problem.
|
Without it, you'll quickly run into the dreaded "n+1 selects" problem.
|
||||||
====
|
====
|
||||||
|
|
||||||
|
@ -1618,13 +1618,13 @@ include::{sourcedir}/HQLTest.java[tags=hql-explicit-fetch-join-example]
|
||||||
|
|
||||||
In this example, we used a left outer join because we also wanted to obtain customers with no orders.
|
In this example, we used a left outer join because we also wanted to obtain customers with no orders.
|
||||||
|
|
||||||
A query may have more than one `fetch join`, but be aware that:
|
A query may have more than one fetch join, but be aware that:
|
||||||
|
|
||||||
* it's perfectly safe to fetch several to-one associations in series or parallel in a single query, and
|
* it's perfectly safe to fetch several to-one associations in series or parallel in a single query, and
|
||||||
* a single series of _nested_ fetch joins is also fine, but
|
* a single series of _nested_ fetch joins is also fine, but
|
||||||
* fetching multiple collections or to-many associations in _parallel_ results in a Cartesian product at the database level, and might exhibit very poor performance.
|
* fetching multiple collections or to-many associations in _parallel_ results in a Cartesian product at the database level, and might exhibit very poor performance.
|
||||||
|
|
||||||
HQL doesn't disallow it, but it's usually a bad idea to apply a restriction to a ``fetch join``ed entity, since the elements of the fetched collection would be incomplete.
|
HQL doesn't disallow it, but it's usually a bad idea to apply a restriction to a ``join fetch``ed entity, since the elements of the fetched collection would be incomplete.
|
||||||
Indeed, it's best to avoid even assigning an identification variable to a fetched joined entity except for the purpose of specifying a nested fetch join.
|
Indeed, it's best to avoid even assigning an identification variable to a fetched joined entity except for the purpose of specifying a nested fetch join.
|
||||||
|
|
||||||
[IMPORTANT]
|
[IMPORTANT]
|
||||||
|
@ -2168,7 +2168,7 @@ What happened to the `limit` clause?
|
||||||
|
|
||||||
[IMPORTANT]
|
[IMPORTANT]
|
||||||
====
|
====
|
||||||
When limits or pagination are combined with `fetch join`, Hibernate must retrieve all matching results from the database and _apply the limit in memory_!
|
When limits or pagination are combined with a fetch join, Hibernate must retrieve all matching results from the database and _apply the limit in memory_!
|
||||||
|
|
||||||
This _almost certainly_ isn't the behavior you were hoping for, and in general will exhibit _terrible_ performance characteristics.
|
This _almost certainly_ isn't the behavior you were hoping for, and in general will exhibit _terrible_ performance characteristics.
|
||||||
====
|
====
|
||||||
|
|
|
@ -330,7 +330,7 @@ public class HQLTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
doInJPA(this::entityManagerFactory, entityManager -> {
|
doInJPA(this::entityManagerFactory, entityManager -> {
|
||||||
//tag::hql-explicit-inner-join-example[]
|
//tag::hql-explicit-inner-join-example[]
|
||||||
|
|
||||||
// same query but specifying join type as 'inner' explicitly
|
// same query, but specifying join type as 'inner' explicitly
|
||||||
List<Person> persons = entityManager.createQuery(
|
List<Person> persons = entityManager.createQuery(
|
||||||
"select distinct pr " +
|
"select distinct pr " +
|
||||||
"from Person pr " +
|
"from Person pr " +
|
||||||
|
@ -367,7 +367,7 @@ public class HQLTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
doInJPA(this::entityManagerFactory, entityManager -> {
|
doInJPA(this::entityManagerFactory, entityManager -> {
|
||||||
//tag::hql-explicit-outer-join-example[]
|
//tag::hql-explicit-outer-join-example[]
|
||||||
|
|
||||||
// functionally the same query but using the 'left outer' phrase
|
// same query, but specifying join type as 'outer' explicitly
|
||||||
List<Person> persons = entityManager.createQuery(
|
List<Person> persons = entityManager.createQuery(
|
||||||
"select distinct pr " +
|
"select distinct pr " +
|
||||||
"from Person pr " +
|
"from Person pr " +
|
||||||
|
@ -386,8 +386,6 @@ public class HQLTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
public void test_hql_explicit_fetch_join_example() {
|
public void test_hql_explicit_fetch_join_example() {
|
||||||
doInJPA(this::entityManagerFactory, entityManager -> {
|
doInJPA(this::entityManagerFactory, entityManager -> {
|
||||||
//tag::hql-explicit-fetch-join-example[]
|
//tag::hql-explicit-fetch-join-example[]
|
||||||
|
|
||||||
// functionally the same query but using the 'left outer' phrase
|
|
||||||
List<Person> persons = entityManager.createQuery(
|
List<Person> persons = entityManager.createQuery(
|
||||||
"select distinct pr " +
|
"select distinct pr " +
|
||||||
"from Person pr " +
|
"from Person pr " +
|
||||||
|
|
Loading…
Reference in New Issue