For main and test dirs:
cp application.properties.dist application.properties
see problem: /src/test/java/hello/entity/nPlusOneProblem/NPlusOneProblemPostTest.java
Using annotation: @BatchSize(size=100)
see solutions: /src/test/java/hello/entity/nPlusOneProblem/solution/batchSize/ClientTest.java
add in application.properties:
spring.jpa.properties.hibernate.batch_fetch_style = PADDED
spring.jpa.properties.hibernate.default_batch_fetch_size = 25
List<Author> authors = getSession().createQuery(
"select a from hello.entity.nPlusOneProblem.solution.joinFetch.Author a join fetch a.books")
.list();
authors.forEach(a -> a.getBooks().size());
AssertSqlCount.assertSelectCount(1);
CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
CriteriaQuery<Author> query = criteriaBuilder.createQuery(Author.class);
Root<Author> root = query.from(Author.class);
root.fetch("books", JoinType.INNER);
query.select(root)
.distinct(true);
List<Author> authors = getSession()
.createQuery(query)
.getResultList();
authors.forEach(a -> a.getBooks().size());
AssertSqlCount.assertSelectCount(1);