โFetch Type
JPA ๊ฐ ํ๋์ Entity ๋ฅผ ์กฐํํ ๋, ์ฐ๊ด๊ด๊ณ์ ์๋ ๊ฐ์ฒด๋ค์ ์ด๋ป๊ฒ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋๋ฅผ ๋ํ๋ด๋ ์ค์ ๊ฐ. ๋ ๊ฐ์ ์ ๋ต์ด ์กด์ฌํ๋ค.
- ์ฐ๊ด ๊ด๊ณ์ ์๋ Entity ๋ค ๋ชจ๋ ๊ฐ์ ธ์จ๋ค → EAGER ์ ๋ต
- ์ฐ๊ด ๊ด๊ณ์ ์๋ Entity ๊ฐ์ ธ์ค์ง ์๊ณ , Getter ๋ก ์ ๊ทผํ ๋ ๊ฐ์ ธ์จ๋ค → LAZY ์ ๋ต
- ManyToOne ๊ตฌ์ฑ → ๋ํดํธ๋ EAGER ๋ก ๋์ด์์

- OneToMany ๊ตฌ์ฑ → ๋ํดํธ๋ LAZY ๋ก ๋์ด์์

๐ ์์ 1 : ManyToOne ๊ตฌ์ฑ
- ์ฃผ๋ฌธ Entity ์ ๋ฉค๋ฒ Entity ๊ฐ @ManyToOne ๊ด๊ณ๋ก ์กด์ฌํ๋ค๊ณ ํ์.
// ์ฃผ๋ฌธ ์ํฐํฐ
@Entity
@Table(name="order")
class Order {
@Id
private Long id;
@ManyToOne(name="member_id")
private Member member;
}
// ๋ฉค๋ฒ ์ํฐํฐ
@Entity
@Table(name="member")
class Member {
@Id
private Long id;
@Column
private String name;
@OneToMany
private HashSet<Order> orders;
}
- @ManyToOne(Fetch = EAGER) ์ผ ๋ (๋ํดํธ)
select
order.id,
order.member_id,
member.id,
member.name
from order
outer join member
on order.member_id=member.id;
→ join ์ ํตํด ๋ Entity ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์จ๋ค. ์ถํ Getter ๋ฅผ ํธ์ถํด๋ ์ด๋ฏธ Cashing ๋์ด์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ์ํ์ง ์๋๋ค.
- @ManyToOne(Fetch = LAZY) ์ผ ๋
select
order.id,
order.member_id
from order;
→ ๊ธฐ์กด Entity ์ธ Order Entity ๋ง ๋ถ๋ฌ์จ๋ค. ์ถํ Getter ์ ํธ์ถํ๋ฉด ์ถ๊ฐ์ ์ธ ์ฟผ๋ฆฌ๋ฌธ์ ๋ฐ์์์ผ ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ด์จ๋ค.
select
member.id,
member.name
from member
where member.id=?;
๐ ์์ 2 : OneToMany ๊ตฌ์ฑ
- @OneToMany(Fetch = EAGER) ์ผ ๋
select
member.id,
member.name
from member;
// member ๊ฐ N๊ฐ ๋ผ๋ฉด order ๊ฐ์ฒด๋ค์ ๊ฐ์ ธ์ค๋ ์ฟผ๋ฆฌ๋ ๋ฐ๋ก N๋ฒ ๋ฐ์
select
order.id,
order.member_id
from order
where member_id=?;
.
.
.
select
order.id,
order.member_id
from order
where member_id=?;
→ member Entity ๋ฅผ ๋ถ๋ฌ์ค๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ํ ํ ๊ฐ Memeber ๋ง๋ค order Entity ๋ฅผ ๋ถ๋ฌ์ค๋ ์ฟผ๋ฆฌ๋ฌธ์ member ์ ์ ๋งํผ ์คํ
- @OneToMany(Fetch = LAZY) ์ผ ๋ (๋ํดํธ)
select
member.id,
member.name
from member;
→ member Entity ๋ฅผ ๋ถ๋ฌ์ค๋ ์ฟผ๋ฆฌ๋ฌธ๋ง์ ์ํ. ์ถํ Getter ๊ฐ ํธ์ถ๋๋ฉด ํด๋น member ์ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ค๋ ์ฟผ๋ฆฌ๋ฌธ์ด ํ ๋ฒ ์ํ๋๋ค.
์ฐธ๊ณ ๋งํฌ : http://jaynewho.com/post/39