n 1 select issues with hibernate
play

N+1 Select Issues with Hibernate Part 2: Solving n+1 select issues - PowerPoint PPT Presentation

How to find and fix N+1 Select Issues with Hibernate Part 2: Solving n+1 select issues with @NamedEntityGraphs www.thoughts-on-java.org Course Structure Part 1: What is the n+1 select issue? How to find it in your project?


  1. How to find and fix N+1 Select Issues with Hibernate Part 2: Solving n+1 select issues with @NamedEntityGraphs www.thoughts-on-java.org

  2. Course Structure • Part 1: • What is the n+1 select issue? • How to find it in your project? • Part 2: • Solving n+1 select issues with @NamedEntityGraphs • Part 3: • Solving n+1 select issues with dynamic EntityGraphs www.thoughts-on-java.org

  3. Application www.thoughts-on-java.org

  4. @NamedEntityGraph www.thoughts-on-java.org

  5. @NamedEntityGraph • Introduced in JPA 2.1 • Declaratively defines a graph of entities which will be loaded • Graph is query independent www.thoughts-on-java.org

  6. @NamedEntityGraph • Define a simple @NamedEntityGraph @NamedEntityGraph( name = "graph.AuthorBooksReviews", attributeNodes = @NamedAttributeNode(value = "books") ) www.thoughts-on-java.org

  7. @NamedEntityGraph • Define a multi-level @NamedEntityGraph @NamedEntityGraph( name = "graph.AuthorBooksReviews", attributeNodes = @NamedAttributeNode(value = "books", subgraph = "books"), subgraphs = @NamedSubgraph( name = "books", attributeNodes = @NamedAttributeNode("reviews") ) ) www.thoughts-on-java.org

  8. @NamedEntityGraph • Provide entity graph as a hint EntityGraph graph = this.em.getEntityGraph("graph.AuthorBooks"); this.em.createQuery("SELECT DISTINCT a FROM Author a") .setHint("javax.persistence.loadgraph", graph); www.thoughts-on-java.org

  9. @NamedEntityGraph • Fetch graph • Eager loading for all elements of the graph • Lazy loading for all other attributes • Load graph • Eager loading for all elements of the graph • Loads all other attributes with their defined FetchType • Hib iber erna nate te alwa always ys uses es a a lo load ad grap aph • HHH-8776 www.thoughts-on-java.org

  10. @NamedEntityGraph • Advantages • Query specific EAGER loading • Definition of the graph is independent of the query • Disadvantages • Creates cartesian product www.thoughts-on-java.org

  11. Want to learn how to identify and fix other Hibernate performance issues? Join my Hib Hiber erna nate te Per erforma formanc nce e Tuni ning ng On Online ine Train ining: ing: www.thoughts-on-java.org/course-hibernate- performance-tuning

Recommend


More recommend