멤버를 조회할 때는 멤버만 가져오고 팀은 프록시로 가져왔다.
이제 m.getTeam().getName() 으로 팀에 있는 뭔가에 접근을 할 때, 쿼리가 나감!
team 프록시 객체가 초기화 되면서 db에서 이 값을 가져와서 채운다.
eager로 변경을 하게 되면 팀을 조인해서 select 쿼리가 나간다.
실무에서는 즉시로딩 쓰면 안된다.
jpql의 경우 member를 select한 후 member를 가져왔더니, team이 즉시로딩으로 되어있네?
즉시로딩인 경우 값이 다 들어가 있어야 한다.
-> member 쿼리가 나가고, member의 개수가 10개라면 10개만큼 eager로 가져오기 위해서 쿼리가 별도로 나간다
예를 들면
select * from Member;
select * from Team where TEAM_ID = xxx;
N+1: 최초 쿼리가 1, 추가 쿼리가 N개
fetchJoin : 동적으로 내가 원하는 애들을 선택하여 가져오는 것.
member랑 Team을 가져와야돼. 그때는 fetchjoin을 쓰게되고 , 이럴때는 한방쿼리로 조인을 해서 값을 가져온다.
lazy로 했지만 Member랑 Team을 다 가져오는것을 볼 수 있다.
fetchJoin을 했기 때문에 데이터가 채워져서 나온다
'스프링 > ORM JPA' 카테고리의 다른 글
영속성 컨텍스트와 OSIV (0) | 2023.10.10 |
---|---|
영속성 컨텍스트 (0) | 2023.09.12 |
고급매핑 (0) | 2023.04.06 |
연관관계 매핑 (0) | 2023.04.04 |
양방향 연관관계 매핑 (0) | 2023.04.04 |