Home > Spring > πŸƒ[Spring] JPAμ—μ„œ "μ—°κ΄€κ΄€κ³„μ˜ 주인" μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸƒ[Spring] JPAμ—μ„œ "μ—°κ΄€κ΄€κ³„μ˜ 주인" μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
Spring Framework

πŸƒ[Spring] JPAμ—μ„œ β€œμ—°κ΄€κ΄€κ³„μ˜ 주인” μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • 두 μ—”ν‹°ν‹° 사이에 μ–‘λ°©ν–₯ 관계가 μžˆμ„ λ•Œ, μ™Έλž˜ ν‚€(Foreign Key)λ₯Ό κ΄€λ¦¬ν•˜λŠ” 주체가 λ˜λŠ” μ—”ν‹°ν‹°λ₯Ό λ§ν•©λ‹ˆλ‹€.
  • μ—°κ΄€κ΄€κ³„μ˜ 주인이 된 μ—”ν‹°ν‹°λ§Œμ΄ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ™Έλž˜ ν‚€λ₯Ό μˆ˜μ •ν•  수 있으며, 이둜 인해 κ΄€κ³„μ˜ λ°©ν–₯을 μ •μ˜ν•˜κ³ , κ΄€λ¦¬μ˜ μ±…μž„μ„ λΆ„λͺ…νžˆ ν•©λ‹ˆλ‹€.

1️⃣ μ—°κ΄€κ΄€κ³„μ˜ 주인이 ν•„μš”ν•œ 이유.

  • 객체의 κ΄€κ³„μ—μ„œλŠ” μ–‘λ°©ν–₯ 관계λ₯Ό μ‰½κ²Œ λ§Œλ“€ 수 μžˆμ§€λ§Œ, κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” μ™Έλž˜ ν‚€κ°€ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ—μ„œλ§Œ μ‘΄μž¬ν•˜λ©°, ν•œμͺ½μ—μ„œλ§Œ μ™Έλž˜ ν‚€λ₯Ό μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • JPAλŠ” μ΄λŸ¬ν•œ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ œμ•½μ„ λ°˜μ˜ν•˜μ—¬, μ–΄λŠ μͺ½μ΄ 관계λ₯Ό 관리할 것인지λ₯Ό μ§€μ •ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

2️⃣ 연관관계 주인의 μ„€μ • 방법.

  • μ—°κ΄€κ΄€κ³„μ˜ 주인은 @ManyToOne λ˜λŠ” @JoinToColumn μ–΄λ…Έν…Œμ΄μ…˜μ΄ μžˆλŠ” μ—”ν‹°ν‹°κ°€ λ©λ‹ˆλ‹€.
  • 주인이 μ•„λ‹Œ μ—”ν‹°ν‹°λŠ” mappedBy 속성을 μ‚¬μš©ν•˜μ—¬ μ—°κ΄€κ΄€κ³„μ˜ 주인을 μ§€μ •ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šκ³  읽기 μ „μš© ν•„λ“œλ‘œλ§Œ μ‚¬μš©λ©λ‹ˆλ‹€.

3️⃣ μ˜ˆμ‹œ.

  • νšŒμ›κ³Ό νŒ€ 사이에 λ‹€λŒ€μΌ(@ManyToOne) 관계가 μžˆλŠ” 경우, νšŒμ› μ—”ν‹°ν‹°κ°€ μ—°κ΄€κ΄€κ³„μ˜ 주인이 λ˜μ–΄ νŒ€μ— λŒ€ν•œ μ™Έλž˜ ν‚€λ₯Ό κ°€μ§€κ²Œ λ©λ‹ˆλ‹€.
@Entity
public class Memeber {
    
    @Id
    @GenereatedValue
    private Long id;
    
    @ManyToOne // μ—°κ΄€κ΄€κ³„μ˜ 주인
    @JoinColumn(name = "team_id") // μ™Έλž˜ ν‚€λ₯Ό 맀핑
    private Team team;
    
    // getters and setters
}
@Entity
public class Team {
    
    @Id
    @GeneratedValue
    private Long id;
    
    @OneToManay(mappedBy = "team") // 주인이 μ•„λ‹˜μ„ λͺ…μ‹œ
    private List<Member> members = new ArrayList<>();
    
    // getters and setters
}
  • μ—¬κΈ°μ„œ Memeber μ—”ν‹°ν‹°κ°€ μ—°κ΄€κ΄€κ³„μ˜ μ£ΌμΈμ΄λ―€λ‘œ team_id μ™Έλž˜ ν‚€λ₯Ό 직접 κ΄€λ¦¬ν•©λ‹ˆλ‹€.
    • 반면, Team μ—”ν‹°ν‹°λŠ” members ν•„λ“œμ— mappedByλ₯Ό μ‚¬μš©ν•˜μ—¬ 관계λ₯Ό 참쑰만 ν•˜κ³ , λ°μ΄ν„°λ² μ΄μŠ€μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

4️⃣ 연관관계 주인의 μ—­ν• κ³Ό μ‚¬μš©.

  • 주인 μ—”ν‹°ν‹°μ—μ„œλ§Œ μ™Έλž˜ ν‚€ 값을 μ„€μ • 및 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 주인이 μ•„λ‹Œ μ—”ν‹°ν‹°μ—μ„œ 관계λ₯Ό 변경해도 λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” λ°˜μ˜λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, 관계λ₯Ό λ³€κ²½ν•  λ•ŒλŠ” 주인 μ—”ν‹°ν‹°μ—μ„œ λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

5️⃣ 연관관계 주인을 잘λͺ» μ„€μ •ν–ˆμ„ λ•Œ λ°œμƒν•  문제.

  • μ—°κ΄€κ΄€κ³„μ˜ 주인을 잘λͺ» μ„€μ •ν•˜λ©΄, μ˜λ„ν•œ λŒ€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— 관계가 λ°˜μ˜λ˜μ§€ μ•Šκ±°λ‚˜ μΌκ΄€λ˜μ§€ μ•Šμ€ μƒνƒœκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.