์ฆ์ ๋ก๋ฉ๊ณผ ์ง์ฐ ๋ก๋ฉ
Member findMember = em.find(Member.class, member.getId());
Member ๋ฅผ ์กฐํํ ๋ Team ๋ ํจ๊ป ์กฐํํด์ผ ํ ๊น?
๋จ์ํ member ์ ๋ณด๋ง ์ฌ์ฉํ๋ ๋น์ฆ๋์ค ๋ก์ง์ด๋ผ๋ฉด
member๋ฅผ ์กฐํํ ๋ team ๊น์ง join ํด์ ๊ฐ์ ธ์ค๋ฉด ์ํด์ด๋ค.
๊ทธ๋์ JPA ๋ ์ง์ฐ๋ก๋ฉ์ด๋ผ๋ ์ต์ ์ ์ ๊ณตํ๋ค.
์ง์ฐ๋ก๋ฉ (fetch = FetchType.LAZY)
@Entity
public class Member {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
private Team team;
team ๊น์ง join ํด์ ๊ฐ์ ธ์ค์ง ์๊ณ member ๋ง ๊ฐ์ ธ์ค๊ณ ์๋ค.
์ด๋ป๊ฒ team ๊ฐ์ฒด๋ ์กฐํ๋์ง ์์๊น?
Member findMember = em.find(Member.class, member.getId());
System.out.println("findTeam = " + findMember.getTeam().getClass());
team ๊ฐ์ฒด๋ฅผ fetch = fetchType.LAZY ๋ก ์ค์ ํ๊ฒ ๋๋ฉด ํ๋ก์๋ก ์กฐํํ๊ธฐ ๋๋ฌธ์ด๋ค .
System.out.println("===============");
findMember.getTeam().getName();
System.out.println("===============");
ํ๋ก์๋ ์ค์ ๋ก ํ์ํ(์ฌ์ฉ๋๋) ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ๋ค. (์ฌ๊ธฐ์๋ getName()ํธ์ถ ์)
๋ง์ฝ Member ์ Team ์ ์์ฃผ ํจ๊ป ์ฌ์ฉํ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น?
์ฆ์๋ก๋ฉ (fetch = FetchType.EAGER)
@Entity
public class Member {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "team_id")
private Team team;
์ฆ์ ๋ก๋ฉ์ ์ํฐํฐ ์กฐํ์ ์ฐ๊ด๊ด๊ณ์ ์๋ ๋ฐ์ดํฐ๊น์ง ํ๋ฒ์ ์กฐํํ ์ ์๊ฒ ํด์ค๋ค.
์ฌ๊ธฐ์๋ member ์กฐํ์ ์ฐ๊ด๊ด๊ณ์ ์๋ team ๊น์ง ์กฐํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
ํ๋ก์๊ฐ ์๋ ์ค์ ์ํฐํฐ ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
ํ๋ก์์ ์ฆ์๋ก๋ฉ ์ฃผ์
์ค๋ฌด์์๋ ์ฆ์๋ก๋ฉ์ ์ฌ์ฉํ์ง ๋ง์ !
( ๋ฐ์ดํฐ๋ฅผ join ํด์ ํ๋ฒ์ ๊ฐ์ ธ์ค๋๊ฒ ์ข์๊ฑฐ ์๋๊ฐ? )
๋ฌธ์ ์ --->
์ฆ์๋ก๋ฉ์ ์ ์ฉํ๋ฉด ์์ํ์ง ๋ชปํ SQL์ด ๋ฐ์ํ ์ ์๋ค.
N+1 ๋ฌธ์
์ฆ์๋ก๋ฉ์ JPQL์์ N+1 ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค.
N+1 : ์ต์ด ์ฟผ๋ฆฌ๋ฅผ ํ๋(1) ๋ ๋ ธ๋๋ฐ ๊ทธ๊ฒ ๋๋ฌธ์ ์ถ๊ฐ ์ฟผ๋ฆฌ๊ฐ N ๊ฐ๊ฐ ๋๊ฐ๋ ๋ฌธ์
List<Member> members = em.createQuery("select m from Member m", Member.class)
.getResultList();
JPQL ์์๋ SQL ๋ก ๋ฒ์ญํ ๋ค์ ์คํํ๋ค. ( SQL : select * from Member )
์ฌ๊ธฐ์๋ Member ๋ง select ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฐ๋ค.
@Entity
public class Member {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "team_id")
private Team team;
Member ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ ์ฐ๊ด๊ด๊ณ์ ์๋ team ์ด ์ฆ์๋ก๋ฉ(EAGER) ์ผ๋ก ์ค์ ๋์ด์๋ค .
--> LAZY ๋ฉด ํ๋ก์๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋์ง๋ง , EAGER ๋ team ์ ๊ฐ์ด ์์ด์ผ ํ๋ค.
๊ทธ๋์ team ์ ๊ฐ์ ์ป๊ธฐ์ํ SQL์ด ๋๊ฐ๋ค. ( SQL : select * from Team where team_id = xxx )
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard