๋ชฉ์ฐจ
๋ค๋์ผ / N:1 / @ManyToOne / N์ด ์ฃผ์ธ์ธ ๊ฒฝ์ฐ
์ธ๋ํค๊ฐ ์๋ ์ชฝ์ด ์ฃผ์ธ
N์ด ์ฃผ์ธ : @ManyToOne, @JoinColumn(name = "~")
(์๋ฐฉํฅ์ธ ๊ฒฝ์ฐ) 1์ด ์๋ธ : @OneToMany(mappedBy = "~")
์ผ๋๋ค / 1:N / @OneToMany / 1์ด ์ฃผ์ธ์ธ ๊ฒฝ์ฐ
์ธ๋ํค๊ฐ ์๋ ์ชฝ์ด ์ฃผ์ธ...์ด์ด์ผํ๋๋ฐ
๊ฐ์ฒด์ ํ ์ด๋ธ์ ์ฐจ์ด ๋๋ฌธ์ ๋ฐ๋ํธ ํ ์ด๋ธ์ ์ธ๋ํค๋ฅผ ๊ด๋ฆฌํ๋ ํน์ดํ ๊ตฌ์กฐ
1์ด ์ฃผ์ธ : @OneToMany, @JoinColumn(name = "~")
(์๋ฐฉํฅ์ธ ๊ฒฝ์ฐ) N์ด ์๋ธ : @ManyToOne, @JoinColumn(name = "~", insertable = false, updatable = false) (์ฌ์ฉํ์ง๋ง์)
๋จ์ !
- ์ํฐํฐ๊ฐ ๊ด๋ฆฌํ๋ ์ธ๋ ํค๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ์๋ค.
- ์ฐ๊ด๊ด๊ณ ๊ด๋ฆฌ๋ฅผ ์ํด ์ถ๊ฐ๋ก Update SQL์ด ์คํ๋๋ค.
( team.getMembers().add(member) => Memberํ ์ด๋ธ์ team_id๋ฅผ ์์ ํด์ฃผ์ด์ผํจ.. )
- ์ผ๋๋ค ๋จ๋ฐฉํฅ๋งคํ๋ณด๋ค ๋ค๋์ผ ์๋ฐฉํฅ๋งคํ์ ์ฌ์ฉํ์
์ผ๋์ผ / 1:1 / @OneToOne / ์ฃผ์ธ ์ ํ ๊ฐ๋ฅ
์ฃผ ํ ์ด๋ธ, ๋์ ํ ์ด๋ธ ์ค ์๋ฌด๊ฑฐ๋ ์ฃผ์ธ์ผ๋ก ์ ํํด๋ ์๊ด์๋ค.
์ธ๋ํค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค UNIQUE ์ ์ฝ์กฐ๊ฑด์ ์ถ๊ฐํ์.
์ธ๋ํค๊ฐ ์๋ ์ชฝ์ด ์ฃผ์ธ
์ฃผ์ธ : @OneToOne, @JoinColumn(name = "~")
(์๋ฐฉํฅ์ธ ๊ฒฝ์ฐ) ์๋ธ : @OneToOne(mappedBy = "~")
์ฐธ๊ณ !
Memberํ ์ด๋ธ์ locker_id๋ฅผ ์ถ๊ฐํด๋, Lockerํ ์ด๋ธ์ member_id๋ฅผ ์ถ๊ฐํด๋ ์๊ด์์ด 1๋1 ๊ด๊ณ๋ ์ฑ๋ฆฝํ๋ค.
ํ์ฌ๋ Member๊ฐ 1๊ฐ์ Locker๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, ๋์ค์ Member๊ฐ N๊ฐ์ Locker๋ฅผ ๊ฐ์ง๊ฒ๋๋ค๋ฉด??
=> ์ด๋๋ Unique์ ์ฝ์กฐ๊ฑด ํ๋๋ง ๋นผ๋ฉด ์ฑ๋ฆฝํ ์ ์๊ฒ Locker์ member_id๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ด ์ข๋ค. (๋์ ํ ์ด๋ธ์ ์ธ๋ํค ์กด์ฌ)
ํ์ง๋ง ๊ฐ์ฒด ์ ์ฅ์์๋ Member์์ Locker๊ฐ ์๋ ํธ์ด, getLockerํด์ ๋ก์ง ๊ตฌ์ฑํ๊ธฐ๊ฐ ๋ ์ฝ๋ค. (์ฃผ ํ ์ด๋ธ์ ์ธ๋ํค ์กด์ฌ)
์ด๋๋ฅผ "์ฃผ"๋ก ํ๊ณ ์ด๋์ "์ธ๋ํค"๋ฅผ ๋ฃ์์ง ๊ฒฐ์ ์ ๊ฐ์์ ๋ชซ์ด๋ค!
๋ค๋๋ค / N:M / @ManyToMany / ์ฌ์ฉํ์ง๋ง์...
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ๊ทํ๋ ํ ์ด๋ธ 2๊ฐ๋ก ๋ค๋๋ค ๊ด๊ณ๋ฅผ ํํํ ์ ์๋ค
ํ์ง๋ง ๊ฐ์ฒด๋ ์ปฌ๋ ์ ์ ์ฌ์ฉํด์ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ํํํ ์ ์๋ค
๋์ค์ ํ๋ ์ ํํด์ ์ฃผ์ธ์ผ๋ก ๋ง๋ ๋ค.
์ฃผ์ธ : @ManyToMany, @JoinTable(name = "~")
(์๋ฐฉํฅ์ธ ๊ฒฝ์ฐ) ์๋ธ : @ManyToMany(mappedBy = "~")
@JoinTable(name = "category_item",
joinColumns = @JoinColumn(name="category_id"),
inverseJoinColumns = @JoinColumn(name="item_id")
)
๋ค๋๋ค ๋งคํ์ ํ๊ณ
- ์ฐ๊ฒฐ ํ ์ด๋ธ์ด ๋จ์ํ ์ฐ๊ฒฐ๋ง ํ๊ณ ๋๋์ง ์๋๋ค.
ํ์๊ณผ ์ํ์ธ ๊ฒฝ์ฐ ์ํ์ ์ฃผ๋ฌธํ๊ฒ๋๋ฉด ์๋๋ ํ์ํ๊ณ , ์ธ์ ์ฃผ๋ฌธํ๋์ง๋ ์ ๋ณด๋ก ์์ด์ผํ๋ค.
ํ์_์ํ ํ ์ด๋ธ์๋ ์ฃผ๋ฌธ์๊ฐ, ์๋ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ ์ถ๊ฐ๋ ์ ์๋ค
- ๊ฐ์ฒด๋ 2๊ฐ์ง๋ง ํ ์ด๋ธ์ ์ฐ๊ฒฐํ ์ด๋ธ๊น์ง 3๊ฐ์ด๋ค.
๊ฐ์ฒด๋ก๋ ๋ณด์ด์ง ์๋ ์ฐ๊ฒฐ ํ ์ด๋ธ์ด ์ค๊ฐ์ ์จ์ด์๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์๊ฐํ์ง ๋ชปํ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ ์ ์๋ค.
์ฐจ๋ผ๋ฆฌ ์ฐ๊ฒฐ ํ ์ด๋ธ์ ์ํฐํฐ๋ก ์น๊ฒฉ์์ผ์ ๋์ ๋ณด์ด๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
โญ์ฐ๊ฒฐ ํ ์ด๋ธ์ ์ถ๊ฐํด์ ์ผ๋๋ค, ๋ค๋์ผ ๊ด๊ณ๋ก ํ์ด๋ด์ผํ๋ค.
'๐พ Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ํ๋ก์์ ์ฆ์๋ก๋ฉ, ์ง์ฐ๋ก๋ฉ / ์์์ฑ ์ ์ด์ ๊ณ ์๊ฐ์ฒด (0) | 2022.02.21 |
---|---|
[JPA] ์์๊ด๊ณ ๋งคํ, ๊ณตํต ์์ฑ ๋งคํ (0) | 2022.02.21 |
[JPA]์์์ฑ ๊ด๋ฆฌ : ๋ด๋ถ ๋์ ๋ฐฉ์ (0) | 2022.02.21 |
[JPA] ์ฐ๊ด๊ด๊ณ ๋งคํ (0) | 2022.02.20 |
[JPA] Java Persistence API ๋ฑ์ฅ๋ฐฐ๊ฒฝ, ์ฌ์ฉ๋ฐฉ๋ฒ (0) | 2022.01.28 |