์๋ฒ ๋๋ ํ์

ํ์ ์ํฐํฐ๊ฐ ์๋ค.
( ๊ทผ๋ฌด ์์์ผ๊ณผ ๊ทผ๋ฌด ์ข ๋ฃ์ผ )
private LocalDateTime startDate;
private LocalDateTime endDate;
( ๋์ , ๋ฒ์ง , ์ฐํธ๋ฒํธ )
private String city;
private String street;
private String zipcode;
์ด ์ ๋ณด๋ค์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์์ง ์์๊น ?
๊ณตํต์ผ๋ก ํด๋์ค ํ์ ์ ๋ง๋ค์ด์ ์ด์ฉํ ์ ์์ง ์์๊น?
๊ณตํต์ผ๋ก ๋ฌถ์ด์ , ํด๋์ค๋ก ๋ง๋ค์ด์ ์ด์ฉ
์๋ฒ ๋๋ ํ์ ์ฌ์ฉ๋ฒ
(๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์)
@Embeddable
public class Period {
@Embeddable
public class Address {
@Embeddable : ๊ฐ ํ์ ์ ์ ์ํ๋ ๊ณณ์ ํ์ํ๋ค.
@Entity
public class Member {
@Embedded
private Period workPeriod;
@Embedded
private Address homeAddress;
@Embedded : ๊ฐ ํ์ ์ ์ฌ์ฉํ๋ ๊ณณ์ ํ์ํ๋ค.
์๋ฒ ๋๋ ํ์ ๊ณผ ํ ์ด๋ธ ๋งคํ
์๋ฒ ๋๋ ํ์ ์ ์ํฐํฐ์ ๊ฐ์ผ ๋ฟ์ด๋ค.
์๋ฒ ๋๋ ํ์ ์ ์ฌ์ฉํ๊ธฐ ์ ๊ณผ ํ์ ๋งคํํ๋ ํ ์ด๋ธ์ ๊ฐ๋ค.
์ ๋ฆฌ
์๋ก์ด ๊ฐ ํ์ ์ ์ง์ ์ ์ํ ์ ์๋ค.
์์คํ ์์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์๋ฒ ๋๋ ํ์ ์ ๊ฐ ํ์ ์ด๋ค.
์๋ฒ ๋๋ ํ์ ์ ํฌํจํ ๋ชจ๋ ๊ฐ ํ์ ์ , ๊ฐ ํ์ ์ ์์ ํ ์ํฐํฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์์กดํ๋ค.
๊ฐ ํ์ ์ ์ํฐํฐ ์์ฑ๋ ๋ ๊ฐ์ด ๋ค์ด์ค๊ณ ์ฃฝ์ ๋ ์ฃฝ๋๋ค .
@AttributeOverride
@Embedded
private Address homeAddress;
@Embedded
private Address workAddress;
ํ ์ํฐํฐ์์ ๊ฐ์ ๊ฐ ํ์ ์ ์ฌ์ฉํ๋ฉด ์ค๋ณต ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค .
@AttributeOverrides, @AttributeOverride๋ฅผ ์ฌ์ฉํด์ ์ปฌ๋ฌ ๋ช ์์ฑ์ ์ฌ์ ์ํ๋ฉด ๋๋ค.
๊ฐ ํ์ ๊ณต์ ์ฐธ์กฐ
Address address = new Address("city", "street", "10000");
Member member = new Member();
member.setName("member1");
member.setHomeAddress(address);
em.persist(member);
Member member2 = new Member();
member2.setName("member2");
member2.setHomeAddress(address);
em.persist(member2);
member1 ๊ณผ member2 ๋ ๊ฐ์ ์ธ์คํด์ค์ธ address ๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค.
member2.getHomeAddress().setCity("newCity");
member2 ์ ์ฃผ์ city ๋ง ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๊ณ ์๊ฐํ๊ณ ์ด๋ ๊ฒ ํ๋ฉด ์๋๋ค .

๊ฐ ํ์ ์ ์ค์ ์ธ์คํด์ค์ธ ๊ฐ์ ๊ณต์ ํ๊ณ ์์ด์ member1 ๊ณผ member2 ๋ชจ๋ city ๊ฐ์ด ๋ฐ๋๋ค.

์๋ฐ ๊ธฐ๋ณธ ํ์ ์์๋ ๊ฐ์ ๋์ ํ๋ฉด ๊ฐ์ ๋ณต์ฌํ๋ค .

ํ์ง๋ง ๊ฐ์ฒด ํ์ ์์๋ ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๋ค.
b.setCity("New") : a ์ b ๋๋ค ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฅดํจ๋ค .
b ์์ ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด ๋๋ค ๊ฒฐ๋ก ์ ์ผ๋ก ๋ฐ๋๋ค.
๋ถ๋ณ ๊ฐ์ฒด
๊ฐ์ฒด ํ์ ์ ์์ ํ ์ ์๊ฒ ๋ง๋ค์ด์ ๋ถ์์ฉ์ ์์ฒ ์ฐจ๋จํด์ผ ํ๋ค.
๊ฐ ํ์ ์ ๋ถ๋ณ ๊ฐ์ฒด(immutable object)๋ก ์ค๊ณํด์ผํ๋ค.
๋ถ๋ณ ๊ฐ์ฒด : ์์ฑ ์์ ์ดํ ์ ๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด์ด๋ค.
์์ฑ์๋ก๋ง ๊ฐ์ ์ค์ ํ๊ณ ์์ ์(Setter)๋ฅผ ๋ง๋ค์ง ์์ผ๋ฉด ๋๋ค.
๊ฐ ํ์ ์ปฌ๋ ์

๊ฐ ํ์ ์ ํ๋ ์ด์ ์ ์ฅํ ๋ ๊ฐ ํ์ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋ค.

๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ปฌ๋ ์ ์ ๊ฐ์ ํ ์ด๋ธ์ ์ ์ฅํ ์ ์๋ค.
์ปฌ๋ ์ ์ ์ ์ฅํ๊ธฐ ์ํ ๋ณ๋์ ํ ์ด๋ธ์ด ํ์ํ๋ค.
@ElementCollection
@CollectionTable(name = "ADDRESS")
private List<Address> addressHistory = new ArrayList<>();
@ElementCollection
๊ฐ ํ์ ์ปฌ๋ ์ ์ ๋งคํํ ๋ ์ฌ์ฉํ๋ค.
RDB์๋ ์ปฌ๋ ์ ๊ณผ ๊ฐ์ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ปด๋ผ์ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์,
๋ณ๋์ ํ ์ด๋ธ์ ์์ฑํ์ฌ ์ปฌ๋ ์ ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
์ด๋ ํด๋น ํ๋๊ฐ ์ปฌ๋ ์ ๊ฐ์ฒด์์ JPA์๊ฒ ์๋ ค์ฃผ๋ ์ด๋ ธํ ์ด์
@CollectionTable
@ElementCollection ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ค.
@CollectionTable์ ๊ฐ ํ์ ์ปฌ๋ ์ ์ ๋งคํํ ํ ์ด๋ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ง์ ํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
๊ฐ ํ์ ์ปฌ๋ ์ ์ ์ ์ฝ์ฌํญ
๊ฐ ํ์ ์ ์ํฐํฐ์ ๋ค๋ฅด๊ฒ ์๋ณ์ ๊ฐ๋ ์ด ์๋ค.
๊ทธ๋์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ถ์ ์ด ์ด๋ ต๋ค.
๊ฐ ํ์ ์ปฌ๋ ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด, ์ฃผ์ธ ์ํฐํฐ์ ์ฐ๊ด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ
๊ฐ ํ์ ์ปฌ๋ ์ ์ ์๋ ํ์ฌ ๊ฐ์ ๋ชจ๋ ๋ค์ ์ ์ฅํ๋ค.
๊ฐ ํ์ ์ปฌ๋ ์ ์ ๋งคํํ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ ๋ฌถ์ด์ ๊ธฐ๋ณธ ํค๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ค.
์ ๋ฆฌ
์ํฐํฐ ํ์ ์ ํน์ง
- ์๋ณ์ O
- ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ
- ๊ณต์
๊ฐ ํ์ ์ ํน์ง
- ์๋ณ์ X
- ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ํฐํฐ์ ์์กดํ๋ค.
- ๊ณต์ ํ์ง ์๋ ๊ฒ์ด ์์ ํ๋ค ( ์ด์ฉ ์ ์์ด ๊ณต์ ํ๋ค๋ฉด ๋ณต์ฌํด์ ์ฌ์ฉ)
- ๋ถ๋ณ ๊ฐ์ฒด๋ก ๋ง๋๋๊ฒ์ด ์์ ํ๋ค.
๊ฐ ํ์ ์ ์ ๋ง ๊ฐ ํ์ ์ด๋ผ ํ๋จ๋ ๋๋ง ์ฌ์ฉํ๋ค.
์ํฐํฐ์ ๊ฐ ํ์
์ ํผ๋ํด์ ์ํฐํฐ๋ฅผ ๊ฐ ํ์
์ผ๋ก ๋ง๋ค๋ฉด ์๋๋ค.
์๋ณ์๊ฐ ํ์ํ๊ณ , ์ง์ํด์ ๊ฐ์ ์ถ์ , ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ๊ทธ๊ฒ ์ ๊ฐ ํ์ ์ด ์๋ ์ํฐํฐ์ด๋ค.
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ
www.inflearn.com