[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 4. ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

2023. 2. 26. 21:32ยทSpring/Spring JPA ๊ธฐ๋ณธ

 

์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

 

๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜์ž 

 

๊ฐ์ฒด์˜ ์ฐธ์กฐ์™€ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๋งคํ•‘

 

 

๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”์— ๋งž์ถ”์–ด ๋ชจ๋ธ๋ง (์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์—†๋Š” ๊ฐ์ฒด)

 

 

Team

@Entity
public class Team {

    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long id;

    @Column(name = "TEAM_NAME")
    private String name;
}

 

Member

@Entity
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column(name = "USERNAME")
    private String name;

    @Column(name = "TEAM_ID")
    private Long teamId;
}

 

 

@Column(name = "TEAM_ID")
private Long teamId;

 

teamId ๋ฅผ team ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋Œ€์‹ ์— ์™ธ๋ž˜ํ‚ค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค 

 

member.setTeamId(team.getId());

 

Member findMember = em.find(Member.class, member.getId());
Long findTeamId = findMember.getTeamId();
Team findTeam = em.find(Team.class, findTeamId);

 

์‹๋ณ„์ž๋กœ ๋‹ค๋ฃจ๊ณ  ๋‹ค์‹œ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๊ฐ€ ์•„๋‹ˆ๋‹ค . 

 

๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”์— ๋งž์ถ”์–ด ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์œผ๋กœ ๋ชจ๋ธ๋งํ•˜๋ฉด, ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

 

๊ฐ์ฒด๋Š” ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์ฐพ๋Š”๋‹ค

 

 

๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„

 

@Entity
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
    
    @Column(name = "USERNAME")
    private String name;
    
    private Team team;
}

 

์‹๋ณ„์ž์ธ teamId ๊ฐ€ ์•„๋‹Œ 

 

์ฐธ์กฐ๊ฐ’์ธ team ์„ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ณ  ์™”๋‹ค  

 

 

@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;

 

@ManyToOne : Member ์™€ Team ์€ N:1 ๊ด€๊ณ„ (ํ•˜๋‚˜์˜ ํŒ€์— ์—ฌ๋Ÿฌ ๋ฉค๋ฒ„๊ฐ€ ์†Œ์†)

 

 

 

@JoinColumn(name = "TEAM_ID") :

 

team ์€ MEMBER ํ…Œ์ด๋ธ”์˜ TEAM_ID(FK) ๋ž‘ ๋งคํ•‘์„ ํ•ด์•ผํ•œ๋‹ค . 

 

 

 

member.setTeam(team);
em.persist(member);

Member findMember = em.find(Member.class, member.getId());
Team findTeam = findMember.getTeam();

 

์‹๋ณ„์ž๋กœ ๋‹ค๋ฃจ๊ณ  , ์‹๋ณ„์ž๋กœ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

 

 ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ธฐ 

 

 

์–‘๋ฐฉํ–ฅ ๋งคํ•‘

 

 

์–‘์ชฝ์—์„œ ์ฐธ์กฐ๊ฐ€๋Šฅํ•œ ๊ด€๊ณ„

 

 

ํ…Œ์ด๋ธ”์˜ ์—ฐ๊ด€๊ด€๊ณ„์—์„œ๋Š” ๋ณ€ํ•œ ๊ฒƒ์ด ์—†๋‹ค 

 

--> ํ…Œ์ด๋ธ”์˜ ์—ฐ๊ด€๊ด€๊ณ„๋Š” ์™ธ๋ž˜ํ‚ค(FK) ํ•˜๋‚˜๋กœ ์–‘๋ฐฉํ–ฅ์ด ๋‹ค ์žˆ๋‹ค , ์‚ฌ์‹ค์ƒ ๋ฐฉํ–ฅ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์—†๋‹ค 

 

MEMBER ์—์„œ ๋‚ด๊ฐ€ ์†Œ์†๋œ ํŒ€์„ ์•Œ๊ณ ์‹ถ์œผ๋ฉด TEAM_ID(FK) ์™€ TEAM_ID(PK)๋ฅผ join ํ•˜๋ฉด ์•Œ์ˆ˜ ์žˆ๋‹ค. 

 

๋ฐ˜๋Œ€๋กœ ์†Œ์†๋œ ํŒ€์—์„œ ์–ด๋–ค ๋ฉค๋ฒ„๋“ค์ด ์žˆ๋Š”์ง€๋„ ๋˜‘๊ฐ™๋‹ค . 

 

 

 

๋ฌธ์ œ๋Š” ๊ฐ์ฒด์ด๋‹ค . 

 

@OneToMany(mappedBy = "team")
List<Member> members = new ArrayList<Member>();

 

TEAM ์—์„œ MEMBER ๋ฅผ ์ฐธ์กฐํ•  ๋ฐฉ๋ฒ•์ด ์—†์œผ๋‹ˆ List members ๋ฅผ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•œ๋‹ค . 

 

@OneToMany : 1:N ๊ด€๊ณ„ 

 

 

 

์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ๊ณผ mappedBy

 

 

๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์ด ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ์ฐจ์ด

 

ํ…Œ์ด๋ธ” ์—ฐ๊ด€๊ด€๊ณ„

 

ํšŒ์› <--> ํŒ€ (์–‘๋ฐฉํ–ฅ)  /   1๊ฐœ 

 

ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ํ‚ค ํ•˜๋‚˜๋กœ ๋‘ ํ…Œ์ด๋ธ”์˜ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. 

 

 

SELECT *
        FROM MEMBER M
        JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
SELECT *
        FROM TEAM T
        JOIN MEMBER M ON T.TEAM_ID = M.TEAM_ID

 

MEMBER.TEAM_ID ์™ธ๋ž˜ํ‚ค ํ•˜๋‚˜๋กœ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค ( ์–‘์ชฝ์œผ๋กœ ์กฐ์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ) 

 

 

 

 

๊ฐ์ฒด ์—ฐ๊ด€๊ด€๊ณ„

 

ํšŒ์› -> ํŒ€ (๋‹จ๋ฐฉํ–ฅ)      /       ํŒ€ -> ํšŒ์› (๋‹จ๋ฐฉํ–ฅ)

 

๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ 2๊ฐœ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค . 

 

๊ฐ์ฒด์˜ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋Š” ์‚ฌ์‹ค ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋‹จ๋ฐฉํ–ฅ ๊ด€๊ณ„ 2๊ฐœ๋‹ค. 

 

๊ฐ์ฒด๋ฅผ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ 2๊ฐœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค .

 

 

 

 

์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ(Owner)

 

๊ฐ์ฒด ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์„ ํ•˜์ž ->  TEAM ์—์„œ MEMBER ๋ฅผ ์ฐธ์กฐํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค ->

 

์–‘์ชฝ์—์„œ ์ฐธ์กฐ๊ฐ€๋Šฅํ•œ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค -> ์ฐธ์กฐ๊ฐ€ 2๊ฐœ๊ฐ€ ๋˜์—ˆ๋‹ค 

 

----> 

 

์—ฌ๊ธฐ์„œ Member์˜ team ๊ฐ’์„ ๋ฐ”๊ฟจ์„ ๋•Œ TEAM_ID(FK) ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผ ํ• ์ง€ 

 

Team์˜ members ๊ฐ’์„ ๋ฐ”๊ฟจ์„ ๋•Œ TEAM_ID(FK)๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผ ํ• ์ง€ ๋”œ๋ ˆ๋งˆ๊ฐ€ ์ƒ๊ธด๋‹ค 

 

๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ์™ธ๋ž˜ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค . 

 

 

 

์–‘๋ฐฉํ–ฅ ๋งคํ•‘ ๊ทœ์น™

 

๊ฐ์ฒด์˜ ๋‘ ๊ด€๊ณ„์ค‘ ํ•˜๋‚˜๋ฅผ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค . 

 

์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ๋งŒ์ด ์™ธ๋ž˜ํ‚ค๋ฅผ ๊ด€๋ฆฌ,๋“ฑ๋ก,์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฃผ์ธ์ด ์•„๋‹Œ์ชฝ์€ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ฃผ์ธ์€ mappedBy ์†์„ฑ์„ ์‚ฌ์šฉX

 

์ฃผ์ธ์ด ์•„๋‹ˆ๋ฉด mappedBy ์†์„ฑ์œผ๋กœ ์ฃผ์ธ์„ ์ง€์ •ํ•œ๋‹ค . 

 

 

 

๋ˆ„๊ตฌ๋ฅผ ์ฃผ์ธ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ• ๊นŒ?

 

์™ธ๋ž˜ ํ‚ค๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฃผ์ธ์œผ๋กœ ์ •ํ•ด๋ผ ! 

 

 

@ManyToOne
@JoinColumn(name = "team_id")
private Team team;

 

์™ธ๋ž˜ํ‚ค๊ฐ€ ์žˆ๋Š” ๊ณณ 

 

Member.team ์ด ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด๋‹ค 

 

 

Member member = new Member();
member.setName("memberA");
member.setTeam(team);

 

์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์— ๊ฐ’์„ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค

 

team.getMembers().add(member);
member.setTeam(team);

 

์–‘๋ฐฉํ–ฅ ๋งคํ•‘์‹œ ์ˆœ์ˆ˜ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ๊ณ ๋ คํ•ด์„œ ํ•ญ์ƒ ์–‘์ชฝ์— ๊ฐ’์„ ์„ค์ •ํ•˜์ž 

 

 

 

์–‘๋ฐฉํ–ฅ ๋งคํ•‘ ์ •๋ฆฌ

 

 

๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘๋งŒ์œผ๋กœ๋„ ์ด๋ฏธ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์€ ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋‹ค. 

 

์–‘๋ฐฉํ–ฅ ๋งคํ•‘์€ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์กฐํšŒ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ ๋ฟ์ด๋‹ค . 

 

๋‹จ๋ฑกํ–ฅ ๋งคํ•‘์„ ์ž˜ํ•˜๊ณ  ์–‘๋ฐฉํ–ฅ์€ ํ•„์š”ํ•  ๋•Œ ์ถ”๊ฐ€ํ•ด๋„ ๋œ๋‹ค. 

 

 

 

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ

www.inflearn.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ

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

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 6. ์ƒ์†๊ด€๊ณ„ ๋งคํ•‘ / @Inheritance  (0) 2023.02.28
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 5. ๋‹ค๋Œ€์ผ[N:1] / ์ผ๋Œ€๋‹ค[1:N] / ์ผ๋Œ€์ผ[1:1] / ๋‹ค๋Œ€๋‹ค[N:M]  (0) 2023.02.27
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 3. ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘  (0) 2023.02.25
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 2. PersistenceContext (์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)  (0) 2023.02.24
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 1. JPA ๊ตฌ๋™ ๋ฐฉ์‹  (0) 2023.02.24
'Spring/Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 6. ์ƒ์†๊ด€๊ณ„ ๋งคํ•‘ / @Inheritance
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 5. ๋‹ค๋Œ€์ผ[N:1] / ์ผ๋Œ€๋‹ค[1:N] / ์ผ๋Œ€์ผ[1:1] / ๋‹ค๋Œ€๋‹ค[N:M]
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 3. ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
  • [์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 2. PersistenceContext (์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)
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
[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 4. ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
์ƒ๋‹จ์œผ๋กœ

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