Home > Spring > πŸƒ[Spring] JPA 연관관계에 λŒ€ν•œ 좔가적인 κΈ°λŠ₯λ“€μ—λŠ” 무엇이 μžˆμ„κΉŒμš”? - 1:1 관계

πŸƒ[Spring] JPA 연관관계에 λŒ€ν•œ 좔가적인 κΈ°λŠ₯λ“€μ—λŠ” 무엇이 μžˆμ„κΉŒμš”? - 1:1 관계
Spring Framework

πŸƒ[Spring] JPA 연관관계에 λŒ€ν•œ 좔가적인 κΈ°λŠ₯λ“€μ—λŠ” 무엇이 μžˆμ„κΉŒμš”? - 1:1 관계

1️⃣ 1:1 관계.

  • ν•˜λ‚˜μ˜ μ—”ν‹°ν‹°κ°€ λ‹€λ₯Έ ν•˜λ‚˜μ˜ 엔티티와 1λŒ€ 1둜 λ§€ν•‘λ˜λŠ” 관계λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, User와 UserProfile μ—”ν‹°ν‹°κ°€ 1:1 관계에 μžˆλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.
      • 각 UserλŠ” ν•˜λ‚˜μ˜ UserProfileλ§Œμ„ 가지며, 각 UserProfile은 ν•˜λ‚˜μ˜ Userμ—λ§Œ 연결될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 1:1 관계λ₯Ό JPAμ—μ„œ 맀핑할 λ•ŒλŠ” 보톡 @OneToOne μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • JPAμ—μ„œλŠ” @JoinColumn을 μ΄μš©ν•΄ 두 μ—”ν‹°ν‹°λ₯Ό μ—°κ²°ν•˜λŠ” μ™Έλž˜ ν‚€λ₯Ό 지정할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘‰ μ˜ˆμ‹œ μ½”λ“œ.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    @OneToOne
    @JoinColumn(name = "user_profile_id") // μ™Έλž˜ ν‚€ μ„€μ •
    private UserProfile userProfile;
    
    // getter, setter λ“±
}

@Entity
public class UserProfile {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String address;
    private String phoneNumber;
    
    @OneToOne(mappedBy = "userProfile") // 연관관계 주인이 μ•„λ‹˜μ„ λͺ…μ‹œ
    private User user;
    
    // getter, setter λ“±
}

πŸ‘‰ μ„€λͺ….

  • User μ—”ν‹°ν‹°λŠ” UserProfile 엔티티와 1:1 κ΄€κ³„λ‘œ, userProfile ν•„λ“œλ₯Ό 톡해 UserProfile을 μ°Έμ‘°ν•©λ‹ˆλ‹€.
  • @JoinColumn은 User μ—”ν‹°ν‹° ν…Œμ΄λΈ”μ— user_profile_idλΌλŠ” μ™Έλž˜ ν‚€ μ»¬λŸΌμ„ μƒμ„±ν•˜μ—¬ 두 μ—”ν‹°ν‹°λ₯Ό μ—°κ²°ν•©λ‹ˆλ‹€.
  • USerProfile μ—”ν‹°ν‹°μ—μ„œλŠ” mappedBy 속성을 μ‚¬μš©ν•˜μ—¬ μ–‘λ°©ν–₯ κ΄€κ³„μ—μ„œμ˜ μ—°κ΄€ κ΄€κ³„μ˜ 주인을 User μ—”ν‹°ν‹°λ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

2️⃣ 단방ν–₯κ³Ό μ–‘λ°©ν–₯.

1️⃣ 단방ν–₯ 1:1 관계.

  • ν•˜λ‚˜μ˜ μ—”ν‹°ν‹°μ—μ„œλ§Œ λ‹€λ₯Έ μ—”ν‹°ν‹°λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

2️⃣ μ–‘λ°©ν–₯ 1:1 관계.

  • 두 μ—”ν‹°ν‹°κ°€ μ„œλ‘œλ₯Ό μ°Έμ‘°ν•  수 있으며, mappedByλ₯Ό μ‚¬μš©ν•˜μ—¬ 주인을 λͺ…μ‹œν•©λ‹ˆλ‹€.

3️⃣ 마무리.

  • 1:1 κ΄€κ³„λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œμ˜ ν…Œμ΄λΈ”μ΄ 잘 λΆ„λ¦¬λ˜κ³  μ„±λŠ₯이 적절히 μœ μ§€λ˜μ–΄μ•Ό ν•  λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€.