Middle
Ще бъде ли извършена операцията JOIN FETCH при използване на лениво зареждане?
sobes.tech AI
Отговор от AI
Операцията JOIN FETCH в JPA се използва за зареждане на свързаните същности по жаден начин, то есть тя зарежда свързаните обекти веднага заедно с основния заявка. Анотацията или настройката за лениво зареждане (FetchType.LAZY) указва, че свързаните данни трябва да се зареждат само при поискване.
Ако в заявката се използва JOIN FETCH, свързаните същности ще бъдат заредени веднага, независимо от това, което е указано в анотацията за лениво зареждане. Тоест, JOIN FETCH отменя стратегията за зареждане и принуждава жадно зареждане.
По този начин, при използване на JOIN FETCH, операцията ще бъде изпълнена и свързаните данни ще бъдат заредени веднага, въпреки ленивото зареждане, зададено в мапинга.
Пример:
String jpql = "SELECT p FROM Parent p JOIN FETCH p.children WHERE p.id = :id";
Parent parent = entityManager.createQuery(jpql, Parent.class)
.setParameter("id", 1L)
.getSingleResult();
// Децата ще бъдат заредени веднага, дори ако в Parent.children е зададен FetchType.LAZY