๐ 6.1 ๋ค๋์ผ
6.1.1 ๋ค๋์ผ ๋จ๋ฐฉํฅ
ํ์์ Member.team์ผ๋ก ํ ์ํฐํฐ๋ฅผ ์ฐธ์กฐํ ์ ์์ง๋ง ํ์๋ ํ์์ ์ฐธ์กฐํ ์ ์๋ ํ๋๊ฐ ์๋ ๋ค๋์ผ ๋จ๋ฐฉํฅ ๊ด๊ณ.
6.1.2 ๋ค๋์ผ ์๋ฐฉํฅ
- ์๋ฐฉํฅ์ ์ธ๋ํค๊ฐ ์๋ ์ชฝ์ด ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ
- ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ ํญ์ ์๋ก๋ฅผ ์ฐธ์กฐํด์ผ ํจ
- ํญ์ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ฒ ํ๋ ค๋ฉด ์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์.
๐ 6.2 ์ผ๋๋ค
6.2.1 ์ผ๋๋ค ๋จ๋ฐฉํฅ
ํ๋์ ํ์ด ์ฌ๋ฌ ํ์์ ์ฐธ์กฐํ๋๋ฐ ํ์ ํ์์ ์ฐธ์กฐํ์ง๋ง ํ์์ ํ์ ์ฐธ์กฐํ์ง ์๋ ๊ด๊ณ๊ฐ ์ผ๋๋ค ๋จ๋ฐฉํฅ ๊ด๊ณ.
์ธ๋ ํค๋ ํญ์ ๋ค์ชฝ ํ
์ด๋ธ์ ์์ผ๋ฏ๋ก ๋ฐ๋ํธ ํ
์ด๋ธ์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๋ ํน์ดํ ๋ชจ์ต์ ๋ํ๋.
@Joincolomn์ ๋ช
์ํ์ง ์์ผ๋ฉด JPA๋ ์กฐ์ธ ํ
์ด๋ธ ์ ๋ต์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํจ.
๋จ์ ์ ๋ค๋ฅธ ํ
์ด๋ธ์ ์ธ๋ ํค๊ฐ ์์ด ์ํฐํฐ ์ ์ฅ๊ณผ ์ฐ๊ด๊ด๊ณ ์ฒ๋ฆฌ๋ฅผ ์ํด UPDATE SQL์ ์ถ๊ฐ๋ก ์คํํด์ผ ํจ.
6.2.2 ์ผ๋๋ค ์๋ฐฉํฅ
์ผ๋๋ค ์๋ฐฉํฅ ๋งคํ์ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ๋ค๋์ผ ์๋ฐฉํฅ ๋งคํ์ ์ฌ์ฉํด์ผ ํจ.
์ผ๋๋ค ๋จ๋ฐฉํฅ ๋งคํ ๋ฐ๋ํธ์ ๊ฐ์ ์ธ๋ํค๋ฅผ ์ฌ์ฉํ๋ ๋ค๋์ผ ๋จ๋ฐฉํฅ ๋งคํ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ถ๊ฐํ๋ฉด ๊ฐ๋ฅํ๊ธด ํจ.
๐ 6.3 ์ผ๋์ผ [1:1]
6.3.1 ์ฃผ ํ
์ด๋ธ์ ์ธ๋ ํค
์ฃผ ํ
์ด๋ธ์ ์ธ๋ ํค๊ฐ ์๋๊ฒ JPA๊ฐ ๋ ํธํ๊ฒ ๋งคํํ ์ ์์.
@Entity
public class Member{
@Id@GeneratedValue
@Column(name = โMEMBER_IDโ)
private Long id;
private String username;
@OneToOne
@JoinColumn(name = โLOCKER_IDโ)
private Locker locker;
โฆ
}
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = โLOCKER_IDโ)
private Long id;
private String name;
@OneToOne(mappedBy = โlockerโ)
private Member member;
โฆ
}
6.3.2 ๋์ ํ
์ด๋ธ์ ์ธ๋ ํค
์ผ๋์ผ ๊ด๊ณ์์ ๋์ ํ
์ด๋ธ์ ์ธ๋ ํค๊ฐ ์๋ ๋จ๋ฐฉํฅ ๋งคํ์ ์ jpa์์ ์ง์ํ์ง ์์. (๋งคํํ ์ ์๋ ๋ฐฉ๋ฒ๋ ์์.)
@Entity
public class Member{
@Id@GeneratedValue
@Column(name = โMEMBER_IDโ)
private Long id;
private String username;
@OneToOne(mappedBy = โmemberโ)
private Locker locker;
โฆ
}
@Entity
public class Locker {
@Id @GeneratedValue
@Column(name = โLOCKER_IDโ)
private Long id;
private String name;
@OneToOne
@JoinColumn(name = โMEMBER_IDโ)
private Member member;
โฆ
}
๐ 6.4 ๋ค๋๋ค [N:N]
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทํ๋ ํ
์ด๋ธ ๋ ๊ฐ๋ก ๋ค๋๋ค ๊ด๊ณ๋ฅผ ํํํ ์ ์์ด ๋ค๋๋ค ๊ด๊ณ๋ฅผ ์ผ๋๋ค, ๋ค๋์ผ ๊ด๊ณ๋ก ํ์ด๋ด๋ ์ฐ๊ฒฐ ํ
์ด๋ธ์ ์ฌ์ฉํจ.
์๋ฅผ ๋ค์ด ํ์๋ค์ ์ํ๋ค์ ์ฃผ๋ฌธํ๊ณ ์ํ๋ค์ ํ์๋ค์ ์ํด ๊ตฌ๋งค๋๋ ๊ด๊ณ.
๊ทธ๋ฐ๋ฐ ๊ฐ์ฒด๋ ํ
์ด๋ธ๊ณผ ๋ค๋ฅด๊ฒ ๊ฐ์ฒด 2๊ฐ๋ก ์ปฌ๋ ์
์ ์ฌ์ฉํด์ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ๋ง๋ค ์ ์์.
@ManyToMany ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ํธ๋ฆฌํ๊ฒ ๋งคํํ ์ ์์.
6.4.1 ๋ค๋๋ค ๋จ๋ฐฉํฅ
@ManyToMany์ @JoinTable์ ์ฌ์ฉํด์ ํ์_์ํ ์ํฐํฐ ์์ด ๋ฐ๋ก ๋งคํํจ.
6.4.2 ๋ค๋๋ค ์๋ฐฉํฅ
๋ค๋๋ค ๋งคํ์ด๋ฏ๋ก ์ญ๋ฐฉํฅ๋ @ManyToMany๋ฅผ ์ด์ฉํ๊ณ , ์์ชฝ ์ค ์ํ๋ ๊ณณ์ mappedBy๋ก ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ์ง์ ํจ.
6.4.3 ๋ค๋๋ค: ๋งคํ์ ํ๊ณ์ ๊ทน๋ณต, ์ฐ๊ฒฐ ์ํฐํฐ ์ฌ์ฉ
@ManyToMany๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ๊ฒฐ ํ
์ด๋ธ์ ์ปฌ๋ผ์ ์ถ๊ฐํ ์ ์์. ์ถ๊ฐํ ์ปฌ๋ผ๋ค์ ๋งคํํ๋ ค๋ฉด ์ํฐํฐ ๊ฐ์ ๊ด๊ณ๋ ํ
์ด๋ธ ๊ฐ์ ๊ด๊ณ์ฒ๋ผ ๋ค๋๋ค์์ ์ผ๋๋ค, ๋ค๋์ผ ๊ด๊ณ๋ก ํ์ด์ผํจ.
- ๋ณตํฉ ๊ธฐ๋ณธ ํค: ํ์์ํ ์ํฐํฐ๋ ๊ธฐ๋ณธ ํค๊ฐ MEMBER_ID์ PRODUCT_ID๋ก ์ด๋ฃจ์ด์ง ๋ณตํฉ ๊ธฐ๋ณธ ํค์ด๋ค.
- ์๋ณ ๊ด๊ณ: ๋ถ๋ชจ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ฅผ ๋ฐ์์ ์์ ์ ๊ธฐ๋ณธ ํค + ์ธ๋ ํค๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐ๋ฒ ์ฉ์ด๋ก ์๋ณ ๊ด๊ณ๋ผ๊ณ ํ๋ค.
6.4.4 ๋ค๋๋ค: ์๋ก์ด ๊ธฐ๋ณธ ํค ์ฌ์ฉ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๊ธฐ๋ณธ ํค๋ฅผ Long ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ. ์๋ณ ๊ด๊ณ์ ๋ณตํฉ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋งคํ์ด ๋จ์ํ๊ณ ์ฌ์.
6.4.5 ๋ค๋๋ค ์ฐ๊ด๊ด๊ณ ์ ๋ฆฌ
์๋ณ ๊ด๊ณ: ๋ฐ์์จ ์๋ณ์๋ฅผ ๊ธฐ๋ณธ ํค + ์ธ๋ ํค๋ก ์ฌ์ฉํจ
๋น์๋ณ ๊ด๊ณ: ๋ฐ์์จ ์๋ณ์๋ ์ธ๋ ํค๋ก๋ง ์ฌ์ฉํ๊ณ ์๋ก์ด ์๋ณ์๋ฅผ ์ถ๊ฐํจ.
๊ฐ์ฒด ์
์ฅ์์ ๋ค ๋จ์ํ๊ณ ํธ๋ฆฌํ ๋น์๋ณ ๊ด๊ณ๋ฅผ ์ถ์ฒํจ.