Home
>
Spring
>
π[Spring] JPA μ°κ΄κ΄κ³μ λν μΆκ°μ μΈ κΈ°λ₯λ€μλ 무μμ΄ μμκΉμ? - N:1κ΄κ³
Spring
Framework
π[Spring] JPA μ°κ΄κ΄κ³μ λν μΆκ°μ μΈ κΈ°λ₯λ€μλ 무μμ΄ μμκΉμ? - N:1κ΄κ³
-
N:1 κ΄κ³λ μ¬λ¬ μν°ν°κ° νλμ μν°ν°μ μ°κ΄λ μ μλ κ΄κ³λ₯Ό μλ―Έν©λλ€.
- λ°μ΄ν°λ² μ΄μ€μμ λ€λμΌ κ΄κ³λΌκ³ λ λΆλ₯΄λ©°, μλ₯Ό λ€μ΄ νλμ νμ(User)μ νλμ ν(Team)μ μμλ μ μκ³ , μ¬λ¬ λͺ
μ νμμ΄ λμΌν νμ μν μ μμ λ N:1 κ΄κ³λ₯Ό μ¬μ©νμ¬ λ§€νν©λλ€.
1οΈβ£ N:1 κ΄κ³μ 맀ν λ°©μ.
-
@ManyToOne
μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ N:1 κ΄κ³λ₯Ό 맀νν©λλ€.
- μ΄λ λ€μ(N) μͺ½μμ νλ(1) μͺ½μ μ°Έμ‘°νμ¬ μΈλ ν€(Foreign Key)λ₯Ό κ°μ§κ² λ©λλ€.
π μμ: νμ(User)κ³Ό ν(Team) κ°μ N:1 κ΄κ³.
- νμκ³Ό νμ κ΄κ³μμ, μ¬λ¬ λͺ
μ νμμ΄ νλμ νμ μμλ μ μμΌλ―λ‘ User μν°ν°μμ Team μν°ν°μμ κ΄κ³λ₯Ό N:1λ‘ μ€μ ν μ μμ΅λλ€.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne // N:1 κ΄κ³ μ€μ .
@JoinColumn(name = "team_id") // μΈλ ν€ μ»¬λΌ μ΄λ¦ μ§μ .
private Team team;
// getter, setter
}
@Entity
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "team") // Teamμ΄ Userμμ μλ°©ν₯ κ΄κ³μμ μ£ΌμΈμ΄ μλ.
private List<User> users = new ArrayList<>();
// getter, setter
}
π μ½λ μ€λͺ
.
- User μν°ν°μ team νλλ
@ManyToOne
μΌλ‘ μ€μ λμ΄ μμΌλ©°, JoinColumnμ μ¬μ©νμ¬ μΈλ ν€λ‘ team_id
컬λΌμ μ§μ ν©λλ€.
- Team μν°ν°λ
@OneToMany(mappedBy = "team")
μΌλ‘ User μν°ν°μ μλ°©ν₯ κ΄κ³λ₯Ό λ§Ίκ³ μμΌλ©°, users 리μ€νΈλ₯Ό ν΅ν΄ μμ μ νμλ€μ μ°Έμ‘°ν©λλ€.
- μ¬κΈ°μ
mappedBy
μμ±μ ν΅ν΄ μ°κ΄κ΄κ³μ μ£ΌμΈμ΄ μλμ λͺ
μνμ΅λλ€.
2οΈβ£ λ¨λ°©ν₯κ³Ό μλ°©ν₯.
1οΈβ£ λ¨λ°©ν₯ N:1 κ΄κ³.
- User μν°ν°μμλ§ Team μν°ν°λ₯Ό μ°Έμ‘°νμ¬ κ΄κ³λ₯Ό λνλ
λλ€.
- λ°μ΄ν°λ² μ΄μ€μλ μΈλ ν€(Foreign Key)κ° User μν°ν°μλ§ μ‘΄μ¬ν©λλ€.
2οΈβ£ μλ°©ν₯ N:1 κ΄κ³.
- Userμ Team μν°ν°κ° μλ‘λ₯Ό μ°Έμ‘°νλ©° μλ°©ν₯ κ΄κ³λ₯Ό κ°μ΅λλ€.
- User μν°ν°κ° μ°κ΄κ΄κ³μ μ£ΌμΈμ΄λ―λ‘, Team μν°ν°μ users νλλ μ½κΈ° μ μ©μ
λλ€.
3οΈβ£ N:1 κ΄κ³μ μμ μν©.
- N:1 κ΄κ³λ λ€μν μν©μμ μ¬μ©λ©λλ€.
1οΈβ£ νμ(Student)κ³Ό νκ΅(School)
- μ¬λ¬ λͺ
μ νμμ΄ νλμ νκ΅μ μμλ μ μμ.
2οΈβ£ μ£Όλ¬Έ(Order)κ³Ό κ³ κ°(Customer)
- μ¬λ¬ κ°μ μ£Όλ¬Έμ΄ νλμ κ³ κ°μκ² μν μ μμ.
4οΈβ£ μ£Όμ μ¬ν.
- N:1 κ΄κ³μμλ λ€μ μͺ½μ΄ μ°κ΄κ΄κ³μ μ£ΌμΈμ΄λ©° μΈλ ν€λ₯Ό κ°μ§λλ€.
- νμμ λ°λΌ μ§μ° λ‘λ©(Lazy Loading)μ μ€μ νμ¬ μ±λ₯μ μ΅μ ννλ κ²μ΄ μ’μ΅λλ€.