Eğer ilişki LAZY ise child nesnenin tamamını yüklemez.
Örnek
Elimizde şöyle bir JPQL olsun
FROM Employee emp
JOIN emp.department dep
SQL olarak şunu elde ederiz. Burada child nesnenin sütunlarının çekilmediği zaten görülebilir. Ancak bir proxy nesne yaratılır.
SELECT emp.*
FROM employee emp
JOIN department dep ON emp.department_id = dep.id
Örnek
JPQL JOIN kodla da elde edilebilir. Şöyle yaparız
@Entitypublic class Author {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;...@OneToMany(fetch=FetchType.LAZY, mappedBy="author")private List<Book> books;}@Entitypublic class Book {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;...@ManyToOneprivate Author author;}public interface BookDataService extends JpaRepository<Book, Long>{}public interface AuthorDataService extends JpaRepository<Book, Long>{}List<Author> authors = authorDataService.findAll();for (Author author : authors) {System.out.printf("Author: %s %s has %d books.%n",author.getFirstName(), author.getLastName(),author.getBooks().size());}
N+1 Select Problemi
JOIN N+1 Select Problemine sebep olur. Bu duruma karşı
1. JOIN FETCH kullanılabilir
2. Hibernate FetchMode.SUBSELECT kullanılabilir
Hiç yorum yok:
Yorum Gönder