JPA Hibernate, Lazy loading after a Join





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I need to get a entity and its collection from a Rest controler but I have a very strange behaviour with spring data JPA.



I have a ManyToMany relation beetween to entities with a Lazy loading.



@Entity
class Folder{
...
@ManyToMany(fetch = FetchType.LAZY)
protected Set<Tag> tags;

...getter setter
}

@Entity class Tag{

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "tags"
protected List<File> files;
}


And a JPQL query in a spring jpa repository



@Query("SELECT f FROM Folder f INNER JOIN f.tags t WHERE
f.id = :id")
Folder findFolderById(@Param("id") int id);


So the Folder is supposed to be populated with the Tag collection and avoid the lazy loading part.



But I can see in the logs that after the Join Query
there is a select on the Tag table, so a lazy loading.



Hibernate: select folder0_.id as id2_2_...
Hibernate: select tags0_.files_id ...



I don't want to use fetch type EAGER because I don't always need the Tag collection. How can I avoid that Lazy loading ?










share|improve this question























  • Specify a fetch join: docs.oracle.com/html/E13946_01/…

    – Alan Hay
    Nov 26 '18 at 15:18











  • thank you next time I'll RTFM

    – Kaizokun
    Nov 26 '18 at 16:02











  • @AlanHay and Kaizokun: I read the linked doku, but I can't understand the use case in oracles example

    – JimHawkins
    Nov 27 '18 at 6:57











  • @JimHawkins : what don't u understand exactly ?

    – Kaizokun
    Nov 27 '18 at 9:36











  • what I read in oracles example is this: the query returns 5 references to the mag azinewith id 1 . Why is this useful?

    – JimHawkins
    Nov 27 '18 at 18:59




















0















I need to get a entity and its collection from a Rest controler but I have a very strange behaviour with spring data JPA.



I have a ManyToMany relation beetween to entities with a Lazy loading.



@Entity
class Folder{
...
@ManyToMany(fetch = FetchType.LAZY)
protected Set<Tag> tags;

...getter setter
}

@Entity class Tag{

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "tags"
protected List<File> files;
}


And a JPQL query in a spring jpa repository



@Query("SELECT f FROM Folder f INNER JOIN f.tags t WHERE
f.id = :id")
Folder findFolderById(@Param("id") int id);


So the Folder is supposed to be populated with the Tag collection and avoid the lazy loading part.



But I can see in the logs that after the Join Query
there is a select on the Tag table, so a lazy loading.



Hibernate: select folder0_.id as id2_2_...
Hibernate: select tags0_.files_id ...



I don't want to use fetch type EAGER because I don't always need the Tag collection. How can I avoid that Lazy loading ?










share|improve this question























  • Specify a fetch join: docs.oracle.com/html/E13946_01/…

    – Alan Hay
    Nov 26 '18 at 15:18











  • thank you next time I'll RTFM

    – Kaizokun
    Nov 26 '18 at 16:02











  • @AlanHay and Kaizokun: I read the linked doku, but I can't understand the use case in oracles example

    – JimHawkins
    Nov 27 '18 at 6:57











  • @JimHawkins : what don't u understand exactly ?

    – Kaizokun
    Nov 27 '18 at 9:36











  • what I read in oracles example is this: the query returns 5 references to the mag azinewith id 1 . Why is this useful?

    – JimHawkins
    Nov 27 '18 at 18:59
















0












0








0








I need to get a entity and its collection from a Rest controler but I have a very strange behaviour with spring data JPA.



I have a ManyToMany relation beetween to entities with a Lazy loading.



@Entity
class Folder{
...
@ManyToMany(fetch = FetchType.LAZY)
protected Set<Tag> tags;

...getter setter
}

@Entity class Tag{

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "tags"
protected List<File> files;
}


And a JPQL query in a spring jpa repository



@Query("SELECT f FROM Folder f INNER JOIN f.tags t WHERE
f.id = :id")
Folder findFolderById(@Param("id") int id);


So the Folder is supposed to be populated with the Tag collection and avoid the lazy loading part.



But I can see in the logs that after the Join Query
there is a select on the Tag table, so a lazy loading.



Hibernate: select folder0_.id as id2_2_...
Hibernate: select tags0_.files_id ...



I don't want to use fetch type EAGER because I don't always need the Tag collection. How can I avoid that Lazy loading ?










share|improve this question














I need to get a entity and its collection from a Rest controler but I have a very strange behaviour with spring data JPA.



I have a ManyToMany relation beetween to entities with a Lazy loading.



@Entity
class Folder{
...
@ManyToMany(fetch = FetchType.LAZY)
protected Set<Tag> tags;

...getter setter
}

@Entity class Tag{

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "tags"
protected List<File> files;
}


And a JPQL query in a spring jpa repository



@Query("SELECT f FROM Folder f INNER JOIN f.tags t WHERE
f.id = :id")
Folder findFolderById(@Param("id") int id);


So the Folder is supposed to be populated with the Tag collection and avoid the lazy loading part.



But I can see in the logs that after the Join Query
there is a select on the Tag table, so a lazy loading.



Hibernate: select folder0_.id as id2_2_...
Hibernate: select tags0_.files_id ...



I don't want to use fetch type EAGER because I don't always need the Tag collection. How can I avoid that Lazy loading ?







hibernate jpa spring-data-jpa






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 26 '18 at 13:58









KaizokunKaizokun

74111




74111













  • Specify a fetch join: docs.oracle.com/html/E13946_01/…

    – Alan Hay
    Nov 26 '18 at 15:18











  • thank you next time I'll RTFM

    – Kaizokun
    Nov 26 '18 at 16:02











  • @AlanHay and Kaizokun: I read the linked doku, but I can't understand the use case in oracles example

    – JimHawkins
    Nov 27 '18 at 6:57











  • @JimHawkins : what don't u understand exactly ?

    – Kaizokun
    Nov 27 '18 at 9:36











  • what I read in oracles example is this: the query returns 5 references to the mag azinewith id 1 . Why is this useful?

    – JimHawkins
    Nov 27 '18 at 18:59





















  • Specify a fetch join: docs.oracle.com/html/E13946_01/…

    – Alan Hay
    Nov 26 '18 at 15:18











  • thank you next time I'll RTFM

    – Kaizokun
    Nov 26 '18 at 16:02











  • @AlanHay and Kaizokun: I read the linked doku, but I can't understand the use case in oracles example

    – JimHawkins
    Nov 27 '18 at 6:57











  • @JimHawkins : what don't u understand exactly ?

    – Kaizokun
    Nov 27 '18 at 9:36











  • what I read in oracles example is this: the query returns 5 references to the mag azinewith id 1 . Why is this useful?

    – JimHawkins
    Nov 27 '18 at 18:59



















Specify a fetch join: docs.oracle.com/html/E13946_01/…

– Alan Hay
Nov 26 '18 at 15:18





Specify a fetch join: docs.oracle.com/html/E13946_01/…

– Alan Hay
Nov 26 '18 at 15:18













thank you next time I'll RTFM

– Kaizokun
Nov 26 '18 at 16:02





thank you next time I'll RTFM

– Kaizokun
Nov 26 '18 at 16:02













@AlanHay and Kaizokun: I read the linked doku, but I can't understand the use case in oracles example

– JimHawkins
Nov 27 '18 at 6:57





@AlanHay and Kaizokun: I read the linked doku, but I can't understand the use case in oracles example

– JimHawkins
Nov 27 '18 at 6:57













@JimHawkins : what don't u understand exactly ?

– Kaizokun
Nov 27 '18 at 9:36





@JimHawkins : what don't u understand exactly ?

– Kaizokun
Nov 27 '18 at 9:36













what I read in oracles example is this: the query returns 5 references to the mag azinewith id 1 . Why is this useful?

– JimHawkins
Nov 27 '18 at 18:59







what I read in oracles example is this: the query returns 5 references to the mag azinewith id 1 . Why is this useful?

– JimHawkins
Nov 27 '18 at 18:59














1 Answer
1






active

oldest

votes


















0














Thanks to Alan Hay. The solution is simple we just need to use the Fetch keyword. In order to populate the collection.



@Query("SELECT f FROM Folder f LEFT JOIN FETCH f.tags t WHERE
f.id = :id")
Folder findFolderById(@Param("id") int id);





share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53482710%2fjpa-hibernate-lazy-loading-after-a-join%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Thanks to Alan Hay. The solution is simple we just need to use the Fetch keyword. In order to populate the collection.



    @Query("SELECT f FROM Folder f LEFT JOIN FETCH f.tags t WHERE
    f.id = :id")
    Folder findFolderById(@Param("id") int id);





    share|improve this answer




























      0














      Thanks to Alan Hay. The solution is simple we just need to use the Fetch keyword. In order to populate the collection.



      @Query("SELECT f FROM Folder f LEFT JOIN FETCH f.tags t WHERE
      f.id = :id")
      Folder findFolderById(@Param("id") int id);





      share|improve this answer


























        0












        0








        0







        Thanks to Alan Hay. The solution is simple we just need to use the Fetch keyword. In order to populate the collection.



        @Query("SELECT f FROM Folder f LEFT JOIN FETCH f.tags t WHERE
        f.id = :id")
        Folder findFolderById(@Param("id") int id);





        share|improve this answer













        Thanks to Alan Hay. The solution is simple we just need to use the Fetch keyword. In order to populate the collection.



        @Query("SELECT f FROM Folder f LEFT JOIN FETCH f.tags t WHERE
        f.id = :id")
        Folder findFolderById(@Param("id") int id);






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 27 '18 at 9:36









        KaizokunKaizokun

        74111




        74111
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53482710%2fjpa-hibernate-lazy-loading-after-a-join%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Wiesbaden

            Marschland

            Dieringhausen