์ํฐํฐ ํด๋์ค ๊ฐ๋ฐ
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
@Column์ ๊ฐ์ฒด ํ๋๋ฅผ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋งคํ์์ผ์ฃผ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค.
name : ํ๋์ ๋งคํํ ํ ์ด๋ธ์ ์ปฌ๋ผ ์ด๋ฆ์ ์ง์ ํ๋ค.
์ํฐํฐ์ ์๋ณ์๋ id ๋ฅผ ์ฌ์ฉํ๊ณ PK ์ปฌ๋ผ๋ช ์ member_id ๋ฅผ ์ฌ์ฉํ๋ค.
@Embeddable
๋์, ์ฃผ์ ๋ฒ์ง, ์ฃผ์ ์ฐํธ๋ฒํธ๋ฅผ
์ฃผ์๋ผ๋ ๊ฐ์ฒด๋ก ๋ฌถ์ด ํํํ๋ฉด ๋ณด๋ค ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๊ฐ ๋ ๊ฒ์ด๋ค.
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
}
์ฃผ์ ์๋ฒ ๋๋ ํ์ ์ ์์ฑํ๊ธฐ ์ํด
@Embeddable ์ด๋ ธํ ์ด์ ์ ์ฃผ์ ํด๋์ค์ ์์ฑ
@Embedded
private Address address;
member ๊ฐ์ฒด์์ ์๋ฒ ๋๋ ํ์ ์ผ๋ก ๋ ์ฃผ์ ๊ฐ์ฒด๋ฅผ
@Embedded ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด ์ฌ์ฉํ๋ค.
@Embeddable : ๊ฐ ํ์ ์ ์ ์ํ๋ ๊ณณ์ ํ์
@Embedded : ๊ฐ ํ์ ์ ์ฌ์ฉํ๋ ๊ณณ์ ํ์
์ฐ๊ด๊ด๊ณ

@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
ํ๋์ ํ์(1)์ ์ฌ๋ฌ ์ํ(N)์ ์ฃผ๋ฌธํ ์ ์๊ณ - ์ผ๋๋ค [1:N] : @OneToMany
mappedBy : ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด ์๋์ ์ค์
์์ฑ์ ๊ฐ์ผ๋ก๋ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ ์ง์ / ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ ํด๋น ์์ฑ์ ํ๋๋ช
@ManyToOne
@JoinColumn(name = "member_id")
private Member member;
์ฌ๋ฌ ์ํ(N)์ ํ๋์ ํ์(1)์ ํฌํจ๋๋ ๊ด๊ณ - ๋ค๋์ผ [N:1] : @ManyToOne
@JoinColumn : ์ธ๋ํค๋ฅผ ๋งคํํ ๋ ์ฌ์ฉ , name ์์ฑ์๋ ๋งคํํ ์ธ๋ ํค ์ปฌ๋ผ๋ช ์ ์ง์
์์๊ด๊ณ ๋งคํ
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Inheritance(strategy=InheritanceType.XXX)์ stategy๋ฅผ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
default ์ ๋ต์ SINGLE_TABLE(๋จ์ผ ํ ์ด๋ธ ์ ๋ต)์ด๋ค.
InheritanceType ์ข ๋ฅ
- JOINED
- SINGLE_TABLE : ๋จ์ผ ํ ์ด๋ธ์ ํ๋ฒ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ค ๋ด๋ ์ ๋ต
- TABLE_PER_CLASS
@DiscriminatorColumn(name = "dtype")
public abstract class Item
๋ถ๋ชจ ํด๋์ค์ ์ ์ธํ๋ค. ํ์ ํด๋์ค๋ฅผ ๊ตฌ๋ถํ๋ ์ฉ๋์ ์ปฌ๋ผ์ด๋ค.
@DiscriminatorValue("M")
public class Movie extends Item{
ํ์ ํด๋์ค์ ์ ์ธํ๋ค. ์ํฐํฐ๋ฅผ ์ ์ฅํ ๋ ์ํผํ์ ์ ๊ตฌ๋ถ ์ปฌ๋ผ์ ์ ์ฅํ ๊ฐ์ ์ง์ ํ๋ค.
์ด๋ ธํ ์ด์ ์ ์ ์ธํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํด๋์ค ์ด๋ฆ์ด ๋ค์ด๊ฐ๋ค.
์ํฐํฐ ์ค๊ณ์ ์ฃผ์์
์ํฐํฐ์๋ ๊ฐ๊ธ์ Setter๋ฅผ ์ฌ์ฉํ์ง ๋ง์
Setter๊ฐ ๋ชจ๋ ์ด๋ ค์๋ค. ๋ณ๊ฒฝ ํฌ์ธํธ๊ฐ ๋๋ฌด ๋ง์์, ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค. ๋์ค์ ๋ฆฌํํ ๋ง์ผ๋ก Setter ์ ๊ฑฐ
๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ค์ !
์ฆ์๋ก๋ฉ( EAGER )์ ์์ธก์ด ์ด๋ ต๊ณ , ์ด๋ค SQL์ด ์คํ๋ ์ง ์ถ์ ํ๊ธฐ ์ด๋ ต๋ค.
ํนํ JPQL์ ์คํํ ๋ N+1 ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ํจ๊ป DB์์ ์กฐํํด์ผ ํ๋ฉด, fetch join ๋๋ ์ํฐํฐ ๊ทธ๋ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
@XToOne(OneToOne, ManyToOne) ๊ด๊ณ๋ ๊ธฐ๋ณธ์ด ์ฆ์๋ก๋ฉ์ด๋ฏ๋ก ์ง์ ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
์ค์ ! ์คํ๋ง ๋ถํธ์ JPA ํ์ฉ1 - ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ - ์ธํ๋ฐ | ๊ฐ์
์ค๋ฌด์ ๊ฐ๊น์ด ์์ ๋ก, ์คํ๋ง ๋ถํธ์ JPA๋ฅผ ํ์ฉํด์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ์คํ๋ง ๋ถํธ์ JPA๋ฅผ ์ค๋ฌด์์ ์ด๋ป๊ฒ ํ์ฉํด์ผ ํ๋์ง ์ดํดํ ์ ์์ต๋๋ค., - ๊ฐ
www.inflearn.com