๐ ๊ฐ ํ์ ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ฒ ์ค๊ณํ๋ค.
@Embeddable
@Getter
@AllArgsConstructor
public class Address {
private String city;
private String street;
private String zipcode;
protected Address() {
}
}
Setter๋ฅผ ์ ๊ฑฐํด ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค.
JPA ์คํ์ ์๋ฒ ๋๋ ํ์ ์ public ๋๋ protected์ธ ๋น ์์ฑ์๊ฐ ํ์ํ๋ค.
- ๊ทธ๋๋ง ์์ ํ protected ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ค.
๐ ๊ฐ๊ธ์ Setter๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
Setter๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ ํฌ์ธํธ๊ฐ ๋ง์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค.
๐ ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ ์ง์ฐ ๋ก๋ฉ์ผ๋ก ์ค์ ํ๋ค.
- ์ฆ์ ๋ก๋ฉ
FetchType.EAGER
๋ ์์ธก๊ณผ SQL ์ถ์ ์ด ์ด๋ ต๋ค. - JPQL์ ์ฌ์ฉํ ๋ N + 1 ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ FetchType.LAZY
๋ฅผ ์ฌ์ฉํ๋ค.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "order_id")
private Order order;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id")
private Item item;
OneToOne, ManyToOne ๊ด๊ณ์ ๊ธฐ๋ณธ๊ฐ์ด FetchType.EAGER
์ด๋ฏ๋ก ์ง์ฐ ๋ก๋ฉ ์ค์ ์ ํด์ค๋ค.
์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ํจ๊ป ์กฐํํ ๋๋ fetch join ๋๋ ์ํฐํฐ ๊ทธ๋ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๐ ์ปฌ๋ ์ ์ ํ๋์์ ์ด๊ธฐํํ๋ค.
@OneToMany(mappedBy = "member")
private final List<Order> orders = new ArrayList<>();
- ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๋ค.
- null ๋ฌธ์ ์์ ์์ ํด์ง๋ค.
Member member = new Member();
System.out.println(member.getOrders().getClass());
em.persist(team);
System.out.println(member.getOrders().getClass());
// ์ถ๋ ฅ
class java.util.ArrayList
class org.hibernate.collection.internal.PersistentBag
- ํ์ด๋ฒ๋ค์ดํธ์์ ์ํฐํฐ๋ฅผ ์์ํํ ๋ ์ปฌ๋ ์ ์ ํ์ด๋ฒ๋ค์ดํธ ๋ด์ฅ ์ปฌ๋ ์ ์ผ๋ก ๋ณ๊ฒฝ์ํจ๋ค.
- ๊ฐ์ ์์๋ก ์์ ํ๋ฉด ํ์ด๋ฒ๋ค์ดํธ๊ฐ ์ ๋๋ก ๋ ๋์์ ํ์ง ๋ชปํ ์ ์๋ค.