[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 1. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐœ๋ฐœ

2023. 2. 21. 15:55ยทSpring/Spring JPA ํ™œ์šฉ

 

์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐœ๋ฐœ

 

@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) ๊ด€๊ณ„๋Š” ๊ธฐ๋ณธ์ด ์ฆ‰์‹œ๋กœ๋”ฉ์ด๋ฏ€๋กœ ์ง์ ‘ ์ง€์—ฐ๋กœ๋”ฉ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1/dashboard

 

์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1 - ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์‹ค๋ฌด์— ๊ฐ€๊นŒ์šด ์˜ˆ์ œ๋กœ, ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋ฅผ ํ™œ์šฉํ•ด์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋ฅผ ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•

www.inflearn.com

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring JPA ํ™œ์šฉ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 5. ์›น ๊ณ„์ธต ๊ฐœ๋ฐœ  (0) 2023.02.23
[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 4. ์ฃผ๋ฌธ ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ  (0) 2023.02.22
[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 3. ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ  (0) 2023.02.21
[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 2. ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐœ๋ฐœ  (0) 2023.02.21
[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 0. Entity / EntityManager  (0) 2023.02.20
'Spring/Spring JPA ํ™œ์šฉ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 4. ์ฃผ๋ฌธ ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ
  • [์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 3. ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ
  • [์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 2. ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐœ๋ฐœ
  • [์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 0. Entity / EntityManager
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 1. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐœ๋ฐœ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”