Backend Ddevelopment
βπ[Backend Development] λ¨λ°©ν₯κ³Ό @OneToOneμ΄λ 무μμΌκΉμ?β
π Intro.
- λ¨λ°©ν₯ @OneToOne κ΄κ³λ μν°ν° κ°μ 1:1 κ΄κ³λ₯Ό λ§€νν λ, νμͺ½ μν°ν°μμλ§ κ΄κ³λ₯Ό κ΄λ¦¬νλ λ°©μμ
λλ€.
- μ¦, ν μν°ν°μμλ§ λ€λ₯Έ μν°ν°λ₯Ό μ°Έμ‘°νκ³ , λ°λμͺ½μμλ μ΄λ₯Ό μμ§ λͺ»νλ μνμ
λλ€.
β
1οΈβ£ μμ μ½λ
- μλ₯Ό λ€μ΄, User μν°ν°μ UserProfile μν°ν°κ° 1:1 κ΄κ³λ₯Ό κ°μ§λ€κ³ κ°μ ν΄λ΄
μλ€.
π User μν°ν°μμ UserProfile μν°ν°λ₯Ό λ¨λ°©ν₯μΌλ‘ μ°Έμ‘°νλ κ²½μ°:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@OneToOne
@JoinColumn(name = "profile_id") // User ν
μ΄λΈμ profile_id 컬λΌμ΄ UserProfileμ idλ₯Ό μ°Έμ‘°
private UserProfile profile;
// Getter, Setter
}
π UserProfile μν°ν°:
@Entity
public class UserProfile {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String bio;
private String website;
// Getter, Setter
}
β
μ€λͺ
:
-
- @OneToOneμ μ¬μ©νμ¬ User μν°ν°κ° UserProfile μν°ν°λ₯Ό μ°Έμ‘°ν©λλ€.
-
- @JoinColumn(name = βprofile_idβ)λ₯Ό μ¬μ©νμ¬ User ν
μ΄λΈμ profile_id 컬λΌμ΄ μμ±λ©λλ€.
-
User ν
μ΄λΈμ profile_idλΌλ μΈλ ν€(FK) 컬λΌμ μΆκ°νκ³ , μ΄ μ»¬λΌμ΄ UserProfile ν
μ΄λΈμ id(PK)λ₯Ό μ°Έμ‘°νλλ‘ λ§λλλ€.
- μ¦, User ν
μ΄λΈμ profile_idκ° UserProfile ν
μ΄λΈμ idλ₯Ό μ°Έμ‘°νλ FKμ΄λ€.
-
- νμ§λ§ UserProfile μν°ν°μλ Userμμ κ΄κ³λ₯Ό μ μ μλ μ λ³΄κ° μμ΅λλ€. β μ΄κ²μ΄ λ¨λ°©ν₯ κ΄κ³μ
λλ€.
β
μ΄μ λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈ μμ:
- μ΄ μ½λλ₯Ό κΈ°λ°μΌλ‘ JPAκ° μμ±νλ ν
μ΄λΈμ 보면 λ€μκ³Ό κ°μ΄ λ©λλ€.
π user ν
μ΄λΈ
id |
username |
profile_id(FK) |
1 |
Alice |
101 |
2 |
Bob |
102 |
π user_profile ν
μ΄λΈ
id |
bio |
website |
101 |
βGamerβ |
βalice.comβ |
102 |
βDeveloperβ |
βbob.devβ |
- π μ¦, user.profile_idλ user_profile.idλ₯Ό μ°Έμ‘°(FK)νλ ꡬ쑰μ
λλ€.
- λ°λΌμ UserProfile μν°ν°μλ profile_idκ° λ°λ‘ νμνμ§ μμ΅λλ€.
- λμ κΈ°λ³Έ ν€(id)κ° User μν°ν°μ μΈλ ν€(profile_id)λ‘ μ¬μ©λ©λλ€.
β
2οΈβ£ λ¨λ°©ν₯ κ΄κ³μ νΉμ§.
β
μ₯μ .
- κ΅¬μ‘°κ° λ¨μνκ³ μ΄ν΄νκΈ° μ½λ€.
- νμͺ½μμλ§ μ°Έμ‘°νλ―λ‘ λΆνμν μ°κ΄κ΄κ³ λ‘λ©μ λ°©μ§ν μ μλ€.
β λ¨μ .
- λ°λμͺ½(UserProfile)μμ Userλ₯Ό μ‘°νν λ°©λ²μ΄ μλ€.
- UserProfileμ΄ μμ μ μ°Έμ‘°νλ Userκ° λꡬμΈμ§ μκ³ μΆλ€λ©΄ λ³λμ 쿼리λ₯Ό μμ±ν΄μΌ νλ€.
β
3οΈβ£ λ¨λ°©ν₯ κ΄κ³ μ‘°ν.
- μ¬μ©μκ° νλ‘ν μ 보λ₯Ό κ°μ Έμ€λ μ½λλ₯Ό μμ±νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
User user = entityManager.find(User.class, 1L);
UserProfile profile = user.getProfile(); // User -> UserProfile μ‘°ν κ°λ₯.