์ฐ๊ด๊ด๊ณ ๋งคํ์ ๊ณ ๋ ค์ฌํญ 3๊ฐ์ง
1. ๋ค์ค์ฑ
2. ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ
3. ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ
- ๊ฐ์ฒด ์๋ฐฉํฅ ๊ด๊ณ๋ ์ฐธ์กฐ๊ฐ 2๊ตฐ๋ฐ ์๊ธฐ ๋๋ฌธ์ ๋์ค ํ ์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ ๊ณณ์ ์ง์ ํด์ผํจ
- ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๋ ์ฐธ์กฐ
- ์ฃผ์ธ์ ๋ฐ๋ํธ : ์ธ๋ ํค์ ์ํฅ์ ์ฃผ์ง ์์, ๋จ์ ์กฐํ
๋ค๋์ผ[N:1]
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํจ
๋จ๋ฐํฅ
์๋์ ๊ฐ์ด [N]์์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๊ณ Team์ ์กฐํ ํ๊ณ ์ถ๊ฐํ ์ ์๋ค. Team์ ์๋ ์กฐํํ์ง ๋ชปํจ -> Team์์ Member์ ์กฐํํ๋์ผ์ด ๋น๋ฒํ๋ค๊ณ ํ๋ฉด -> ์๋ฐํฅ ์ผ๋ก ๋งคํํด์ฃผ๋๊ฒ ์ข์.
์๋ฐํฅ
๋จ๋ฐํฅ์์ TEAM์ด MEMBER๋ฅผ mapped by ๋ฅผ ์ถ๊ฐํ์ฌ MEMBER๋ฅผ ์กฐํํ ์ ์๋ค. (์ฝ๊ธฐ ์ ์ฉ)
์ผ๋๋ค[1:N]
1์ด ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด๋ค.
๋จ๋ฐฉํฅ
TEAM ์์ ์ธ๋ํค๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ฉด TEAM์ MEMBER๋ฅผ ์ถ๊ฐํ ๋ MEMBER ๋ํ update๋ฅผ ํ๋ค ์ฑ๋ฅ์ ์ถ์ฒ ํ์ง ์๊ณ ์ค์ ์ฌ์ฉํ ๋ ์ฟผ๋ฆฌ์ถ์ ์ update๋ฌธ์ ๋ณด๊ณ ์๋ฌธ์ ๊ฐ์ง ์ ์๋ค.(์ค๋ฌด์์ ์๋ง์ ํ ์ด๋ธ์ด ์์ ๋ ์ข์ง ์์)
์ Team ์ MEMBER์ ์ธ๋ํค๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋ ๊น?
ํ ์ด๋ธ ์ฐ๊ด๊ด๊ณ๋ฅผ ์๊ฐํด๋ณด๋ฉด TEAM ์์ MEMBER์ ์ถ๊ฐํ ๋๋ง๋ค TEAM ๋ก์ฐ ๋ํ ์์ฑ๋์ด์ผ ํ๋ค. -> ์๋ชป๋ ์ค๊ณ
์ด๊ธฐ ๋๋ฌธ์ MEMBER ํ ์ด๋ธ์ ์ธ๋ํค๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ ๊ฒ
์ฌ์ฉ๋ฒ Team.java ์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค. ๋จ๋ฐฉํฅ์ด๋ฏ๋ก MEMBER์๋ ์๋ฌด๊ฒ๋ ์ถ๊ฐํ์ง ์๋๋ค.
@OneToMany
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<>();
์ผ๋๋ค ๋จ๋ฐฉํฅ ๋งคํ๋ณด๋ค๋ ๋ค๋์ผ ์๋ฐฉํฅ ๋งคํ์ ์ฌ์ฉํ์
- ์ํฐํฐ๊ฐ ๊ด๋ฆฌํ๋ ์ธ๋ ํค๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ์์
- ์ฐ๊ด๊ด๊ณ ๊ด๋ฆฌ๋ฅผ ์ํด ์ถ๊ฐ๋ก UPDATE SQL ์คํ
์๋ฐํฅ
๊ณต์์ ์ผ๋ก ์กด์ฌํ์ง ์์.
@JoinColumn(insert=false,updateable=false) -> ์ฝ๊ธฐ ์ ์ฉ ํ๋๋ฅผ ์ฌ์ฉํด์ ์๋ฐฉํฅ ์ฒ๋ผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๋ค๋์ผ ์๋ฐฉํฅ์ ์ฌ์ฉํ์
@ManyToOne ์์๋ ์ mappedBy๊ฐ ์์๊น?
์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด ๋ค๋ฅธ ํ ์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ผ๋งค ๋งคํ์ ์ฌ์ฉํด์ผ ํ๋๋ฐ ๊ณต์์คํฉ์์ ์คํ๋ ค ํผ๋์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ ์๋ค!
์ผ๋์ผ[1:1]
์ผ๋์ผ ๊ด๊ณ ๋ฐ๋๋ ์ผ๋์ผ
- ์ฃผ ํ ์ด๋ธ์ด๋ ๋์ ํ ์ด๋ธ ์ค์ ์ธ๋ ํค ์ ํ ๊ฐ๋ฅ
- ์ธ๋ ํค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ ๋์ด์ผ ํจ
- ๊ฐ์ด ์์ผ๋ฉด ์ธ๋ ํค์ null ํ์ฉ์ด ๋๋ค.
- ์ฃผ ํ ์ด๋ธ๋ง ์กฐํธํํด๋ ๋์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธ ๊ฐ๋ฅํ๋ค.
- ๋ค๋์ผ ์ฐ๊ด๊ด๊ณ๋ ์ ์ฌ
์ฝ๋๋ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ค. LOKCER์ MEMBER์ ๋ฃ์ด๋ ๋๋ค. (์ ํ๊ฐ๋ฅ)
@OneToOne
@JoinColumn(name= "LOCKER_ID")
private Locker locker;
์๋ฐํฅ
๋ค๋์ผ ์๋ฐฉํฅ ๋งคํ ์ฒ๋ผ ์ธ๋ ํค๊ฐ ์๋ ๊ณณ์ด ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด๋ค. ๋ฐ๋ํธ์ ์๋์ ๊ฐ์ด mappedBy ์ ์ฉ
@OneToOne
@JoinColumn(name= "LOCKER_ID")
private Locker locker;
/////////////////////////////////////////
@OneToOne(mappedBy="locker")
private Member member;
๋์ ํ ์ด๋ธ์ ์ธ๋ ํค๊ฐ ์๋ ๋จ๋ฐฉํฅ์ผ ๊ฒฝ์ฐ? ์ง์ํ์ง ์์ ํ์ง๋ง ์๋ฐํฅ์ ์ง์ํ๋ค.
๋์ ํ ์ด๋ธ์ ์ธ๋ ํค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์ด๊ณ ์ ํต์ ์ธ DB ๊ฐ๋ฐ์๊ฐ ์ ํธํ๋ค.
์๋ฐํฅ์ผ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์์ ์ Entity์ ์๋ ์ธ๋ํค๋ ์์ ์ด ์ง์ ๊ด๋ฆฌ ํด์ผ ํ๋ค.
๋ค๋๋ค[N:N]
์ค๋ฌด์์ ์ฐ๋ฉด ์๋๋ค! -> ๋ค๋๋ค๋ก ํ๋ฆฌ๋ ๊ฐ๋จํ๊ฒ ์๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ๊ทํ๋ ํ ์ด๋ธ 2๊ฐ๋ก ๋ค๋๋ค ๊ด๊ณ๋ฅผ ํํํ ์ ์๋ค.
์ฐ๊ฒฐ ํ ์ด๋ธ์ ์ถ๊ฐํด์ ์ผ๋๋ค, ๋ค๋์ผ ๊ด๊ณ๋ก ํ์ด๋ด์ผ ํ๋ค.
ํธ๋ฆฌํด๋ณด์ด์ง๋ง ์ฐ๊ฒฐ๋ง ํ๊ณ ๋๋์ง ์๋๋ค. ์ค๊ฐํ ์ด๋ธ์ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ฃ์ ์ ์๋ค.
- @ManyToMany ์ฌ์ฉ
- @JoinTable๋ก ์ฐ๊ฒฐ ํ ์ด๋ธ ์ง์
- ๋ค๋๋ค ๋งคํ : ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ ๊ฐ๋ฅ
์๋์ ๊ฐ์ด ์ค๊ฐํ ์ด๋ธ์ ์ง์ ํด์ฃผ๋ฉด MEMBER์ PRODUCT ํ ์ด๋ธ์ PK๋ฅผ ๊ฐ๊ณ ์๋ ํ ์ด๋ธ์ด ์์ฑ๋๋ค.
@ManyToMany
@joinTable(name="MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
// ์๋ฐํฅ์ผ ๊ฒฝ์ฐ
@ManyToMany(mappedBy="products")
private List<Member> members = new ArrayList<>();
'๐ WEB > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
7. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ํ๋ก์์ ์ฐ๊ด๊ด๊ณ ๊ด๋ฆฌ (0) | 2021.05.18 |
---|---|
6. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ณ ๊ธ๋งคํ (0) | 2021.05.17 |
4. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ์ฐ๊ด๊ด๊ณ (0) | 2021.05.14 |
3. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ์ํฐํฐ ๋งคํ (0) | 2021.05.13 |
2. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๋ด๋ถ ๋์ ๋ฐฉ์ (0) | 2021.05.13 |