0
Sponsored Links


Ad by Google
Hibernate is very popular ORM framework, and it has various features. One of the important and popular feature is query optimization. To improve the performance of Hibernate query Hibernate provides four fetching strategies and those are listed below with example.

Fetching strategies supported by Hibernate:
  1. Join fetching (@Fetch(FetchMode.JOIN))
  2. Subselect fetching (@Fetch(FetchMode.SUBSELECT))
  3. Batch fetching (@BatchSize(size=x))
  4. Select fetching (@Fetch(FetchMode.SELECT))
Join fetching: Hibernate uses join fetching strategy to fetch the associated instances or collections from the persistence(database) using the same SELECT query with help of OUTER JOIN. So there will be exactly only one select query will generated by Hibernate. You can see the complete example of Join Fetching, here is the output of the Join Fetching
Hibernate: 
    select
        author0_.author_id as author_i1_0_0_,
        author0_.dob as dob2_0_0_,
        author0_.first_name as first_na3_0_0_,
        author0_.last_name as last_nam4_0_0_,
        books1_.author_id as author_i4_0_1_,
        books1_.book_id as book_id1_1_1_,
        books1_.book_id as book_id1_1_2_,
        books1_.author_id as author_i4_1_2_,
        books1_.isbn as isbn2_1_2_,
        books1_.title as title3_1_2_ 
    from
        author author0_ 
    left outer join
        book books1_ 
            on author0_.author_id=books1_.author_id 
    where
        author0_.author_id=?

Subselect fetching: a second SELECT is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying lazy="false", this second select will only be executed when you access the association. Only two select query will be executed in Subselect fetching using sub select. You can see the complete example of Subselect fetching, here is the out put of the Subselect fetching.
Hibernate: 
    select
        author0_.author_id as author_i1_0_,
        author0_.dob as dob2_0_,
        author0_.first_name as first_na3_0_,
        author0_.last_name as last_nam4_0_ 
    from
        author author0_
Hibernate: 
    select
        books0_.author_id as author_i4_0_1_,
        books0_.book_id as book_id1_1_1_,
        books0_.book_id as book_id1_1_0_,
        books0_.author_id as author_i4_1_0_,
        books0_.isbn as isbn2_1_0_,
        books0_.title as title3_1_0_ 
    from
        book books0_ 
    where
        books0_.author_id in (
            select
                author0_.author_id 
            from
                author author0_
        )

Batch fetching: an optimization strategy for select fetching. Hibernate retrieves a batch of entity instances or collections in a single SELECT by specifying a list of primary or foreign keys. Here is complete example of Batch Fetching with detail implementation see the output.
Hibernate: 
    select
        author0_.author_id as author_i1_0_,
        author0_.dob as dob2_0_,
        author0_.first_name as first_na3_0_,
        author0_.last_name as last_nam4_0_ 
    from
        author author0_
Hibernate: 
    select
        books0_.author_id as author_i4_0_1_,
        books0_.book_id as book_id1_1_1_,
        books0_.book_id as book_id1_1_0_,
        books0_.author_id as author_i4_1_0_,
        books0_.isbn as isbn2_1_0_,
        books0_.title as title3_1_0_ 
    from
        book books0_ 
    where
        books0_.author_id in (
            ?, ?, ?, ?, ?
        )

Select fetching: a second SELECT is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying lazy="false", this second select will only be executed when you access the association. This is the default fetching strategy supported by Hibernate.

References
Reference 1
Reference 2
Reference 3


Sponsored Links

0 comments:

Post a Comment