* ν΄λΉ κΈμ κΉμν κ°μ¬λμ μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈμ λ³΄κ³ κ°λ¨νκ² μ 리ν κΈμ λλ€.(μμΈν λ΄μ©μ κ°μκ° μ΅κ³±λλ€. κ°μ μ¬μΈμ)
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ κ°μ - μΈνλ°
μ λ μΌμνμ΄ μλλΌ νμνμΈκ°λ΄μ^^ νμ©νΈ λμ΄κ°λ€ 30% μ λ λ£κ³ λμ ν λ΅λ΅ν΄μ κΈ°λ³ΈνΈμ λ€μ΄λ²λ Έλ€μ^^. νμ£Ό νμ£Ό κΉμνλ κ°μ λ€μΌλ λ μ λλ λͺ¨μ΅μ μ€μ€λ‘ λλλλ€. νΉν μ€
www.inflearn.com
λ€λμΌ κ΄κ³
λ€λμΌ λ¨λ°©ν₯
- μ°κ΄κ΄κ³μ μ£ΌμΈμ λ€ μͺ½μ μλ€.
- "λ€"μͺ½μμ "μΌ"μͺ½μΌλ‘λ§ μ°Έμ‘°κ° κ°λ₯νλ€.
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
μμ κ°μ΄ _@JoinColumn_μ ν΅ν΄ κ΄κ³λ₯Ό μ€μ ν μ μλ€.
λ€λμΌ μλ°©ν₯
- μλ°©ν₯μ μΈλ ν€κ° μλ μͺ½μ΄ μ°κ΄κ΄κ³μ μ£ΌμΈμ΄λ€.
- λ€λμΌ μ°κ΄κ΄κ³μμλ νμ λ€μ μΈλ ν€κ° μλ€. λ°λΌμ λ€ μͺ½μ΄ μ°κ΄κ΄κ³μ μ£ΌμΈμ΄λ€.
- μ°κ΄κ΄κ³μ μ£ΌμΈμ΄ μλ μͺ½μ μ‘°νλ₯Ό μν JPQLμ΄λ κ°μ²΄ κ·Έλν νμμ μν΄μλ§ μ¬μ©λλ€.
- μλ°©ν₯ μ°κ΄κ΄κ³λ μλ‘λ₯Ό μ°Έμ‘°νλ€.
- μ΄λ, μ°κ΄κ΄κ³ νΈμ λ©μλλ₯Ό μμ±ν μ μλλ° λ κ³³ λ€ μ€μ νλ©΄ 무ν 루νμ λΉ μ§λ―λ‘ μ‘°μ¬νμ.
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<Member>();
μμ κ°μ μ€μ μ ν΅ν΄ μ½κ² λ€λμΌ κ΄κ³λ₯Ό μ€μ ν μ μλ€.
μΌλλ€
μΌλλ€ λ¨λ°©ν₯
μμ 보μλ λ€λμΌ κ΄κ³μμλ νμ(λ€)μ΄ ν(μΌ)μ μ°Έμ‘°νλ κ²½μ° μ¬μ©νμμ§λ§, μΌλλ€λ λ°λμ κ²½μ°μ΄λ€.
ν(μΌ)μ΄ νμ(λ€)μ μ°Έμ‘°νλ κ²½μ°μ μΌλλ€ κ΄κ³λ₯Ό μ¬μ©νλ€.
- μΈλ ν€λ νμ λ€μͺ½μ μμΉνλ€. νμ§λ§ κ°μ²΄μμλ λ€ μͺ½μ μ°Έμ‘° νλλ₯Ό κ°μ§μ§ μλλ€.
- λ°λΌμ μΌ μͺ½μμ μΈλ ν€λ₯Ό κ΄λ¦¬νλ νΉμ΄ν λͺ¨μ΅μ κ°μ§λ€.
@OneToManhy
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<Member>();
μΌλλ€ λ¨λ°©ν₯ λ§€νμ λ§€νν κ°μ²΄κ° κ΄λ¦¬νλ μΈλν€κ° λ€λ₯Έ ν μ΄λΈμ μμ΄ Update μΏΌλ¦¬κ° νλ λ λκ°λ λ¨μ μ κ°μ§λ€. μλνλ©΄, Member μν°ν°λ Team μν°ν°λ₯Ό λͺ¨λ₯΄κ³ , μ°κ΄κ΄κ³μ λν μ 보λ Teamμν°ν°μ membersκ° κ΄λ¦¬νλ€. λ°λΌμ, Memberλ₯Ό μ μ₯ν λ Member ν μ΄λΈμ TEAM_IDμλ μλ¬΄λ° μ λ³΄κ° μ μ₯λ μ μλ€.
λμ μ Team.membersμ μ 보λ₯Ό νμΈνμ¬ TEAM_ID μΈλ ν€λ₯Ό μ λ°μ΄νΈνλ μμΌλ‘ μ μ₯ν΄μΌ ν΄μ Update μΏΌλ¦¬κ° νλ λ λκ°λ€.
μΌλλ€ μλ°©ν₯
μΌλλ€ μλ°©ν₯ κ΄κ³λ μ‘΄μ¬νμ§ μλλ€. μ΄λ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μ νΉμ± μ νμ λ€ μͺ½μμ μΈλν€λ₯Ό κ΄λ¦¬νκΈ° λλ¬Έμ΄λ€.
κ·Έλμ μ°κ΄κ΄κ³μ μ£ΌμΈμ νμ _@ManyToOne_μ μ¬μ©ν κ³³μ΄κΈ° λλ¬Έμ, _@ManyToOne_μλ μ°κ΄κ΄κ³μ μ£ΌμΈμ΄ μλ mappedBy μμ±μ΄ μλ€.
κ·Έλ κΈ° λλ¬Έμ μ½κ°μ μΌλ§€μΈ λ°©μμΌλ‘ μΌλλ€ μλ°©ν₯ κ΄κ³λ₯Ό ν΄κ²°νλ€.
λ°©λ²μ λ μͺ½ λͺ¨λ _@JoinColumn_μ μμ±ν΄μ£Όλ κ²μ΄λ€.
κ·Έλ¦¬κ³ , "λ€" μͺ½μΈ κ³³μμλ μ½κΈ° μ μ©μΌλ‘λ§ λ§λ€μ΄ μ£Όμ΄ μ°Έμ‘°λ κ°λ₯νλλ‘ λ§λ€μ΄ μ€λ€.
@ManyToTone
@JoinColumn(name = "TEAM_ID", insertable = false, updatable = false)
private Team team;
@OneToMany
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<Member>();
_@JoinColumn_μ΄ λ λ€ μκΈ° λλ¬Έμ μ₯? λλ€ μ°κ΄κ΄κ³μ μ£ΌμΈμΈκ°? μΆμλ°, λ€μ λ μ΅μ λλ¬Έμ μ½κΈ° μ μ©μ΄ λΌλ²λ¦°λ€.
κ·Έλ₯ λ€λμΌ μ°μ.
μΌλμΌ
- μΌλμΌμ κ·Έ λ°λλ μΌλμΌμ΄λ€.
- μΌλμΌ μ΄λ μͺ½μμλ μΈλν€λ₯Ό κ°μ§ μ μλ€.
- λ°λΌμ λκ° μΈλ ν€λ₯Ό κ°μ§μ§ μ νν΄μΌ νλ€.
- μ£Ό ν μ΄λΈμ μΈλν€λ₯Ό λλ λ°©λ²
- λμ ν μ΄λΈμ μΈλν€λ₯Ό λλ λ°©λ²
μΌλμΌ - μ£Ό ν μ΄λΈμ μΈλν€
@OneToOne
@JoinColoumn(name = "LOCKER_ID")
private Locker locker;
μ΄λ κ²λ§ νλ€λ©΄, μ°κ΄κ΄κ³μ μ£ΌμΈμ Memberμ΄λ€.
λ§μ½μ μλ°©ν₯μΌλ‘ λ§λ€κ³ μΆλ€λ©΄ λ°λμͺ½μμλ λ§λ€μ΄μ£Όλ©΄ λλ€.
@OneToOne(mappedBy = "lcoker")
private Member member;
μΌλμΌ - λμ ν μ΄λΈμ μΈλν€
μΌλμΌμμ λμ ν μ΄λΈμ μΈλ ν€κ° μλ κ²½μ° λ¨λ°©ν₯μ μ§μνμ§ μκ³ μλ°©ν₯λ§ μ§μλλ€.
μλ°©ν₯λ μΌλμΌ μ£Ό ν μ΄λΈ μΈλν€ μλ°©ν₯κ³Ό λ‘μ§μ κ°λ€. κ·Έμ ν μ΄λΈλ§ λ€μ§μ΄ μ€ κ²μ΄λ€.
λμ ν μ΄λΈμ μΈλν€κ° μλ κ²μ΄κ³ , κ°μ²΄λ μνΈ μ‘°νκ° κ°λ₯ν κ΄κ³κ° λ λΏμ΄λ€.
κ·Έλ λ€λ©΄ μ΄λμ μΈλν€λ₯Ό λλ κ²μ΄ λμκΉ?
μ΄λ λ―Έλλ₯Ό μ΄ν΄λ³΄μμΌ νλ€. λ§μ½, λ―Έλμ 1:N κ΄κ³λ‘ λ³ν μ μλ κ΄κ³λΌλ¦¬λ FKκ° μ΄λμ μλμ λ°λΌ μ μ§μ€λΉκ° λ¬λΌμ§λ€.
μλ₯Ό λ€μ΄, Member : Lockerκ° 1:Nμ΄λ©΄, Lockerμ FKκ° μλ€λ©΄, μ μ§μ€λΉκ° νΈν΄μ§ κ²μ΄λ€.
λ°λλ‘ κ°λ°μ μ μ₯μμλ Memberλ₯Ό μ‘°νν λ, Locker μ λ³΄κ° λ€ λμ€λ κ²μ΄ ν¨μ¬ μ’κΈ° λλ¬Έμ Memberμ FKκ° μλ κ²μ΄ λ νΈλ¦¬νλ€.(λ무 λ¨Ό λ―Έλλ μκ°νμ§ μλ νΈμ΄ λμ μλ..)
λν, λμ ν μ΄λΈμ μΈλν€κ° μλ€λ©΄ νλ‘μ κΈ°λ₯μ νκ³λ‘μ§μ° λ‘λ©μ΄ μ λ¨Ήνκ³ , νμ μ¦μ λ‘λ©μ΄ λλ€λ λ¨μ μ΄ μλ€.
λ€λλ€
κ²°λ‘ λΆν° λ§νμλ©΄, μ€λ¬΄μμλ λ€λλ€ κ΄κ³λ₯Ό μ¬μ©νλ©΄ μ λλ€.
μλνλ©΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ μ κ·νλ ν μ΄λΈ 2κ°λ‘ λ€λλ€ κ΄κ³λ₯Ό ννν μ μκΈ° λλ¬Έμ΄λ€.
κ·Έλμ μ°κ²° ν μ΄λΈμ μΆκ°ν΄μ, μΌλλ€ λ€λμΌ κ΄κ³λ‘ νμ΄λ΄λ κ²μ΄ λ§λ€.
κ·Έλλ μ°μ , λ°©λ²μ μ€λͺ νμλ©΄ 컬λ μ μ μ¬μ©νλ©΄ λλ€.
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
μ΄λ° μμΌλ‘ _@ManyToMany_λ₯Ό μ¬μ©νλ©΄ λκ³ , λ¨λ°©ν₯μμ μλ°©ν₯μΌλ‘ λ§λ€κ³ μΆλ€λ©΄ λ°λμͺ½μλ μ€μ ν΄ μ£Όλ©΄ λλ€.
@ManyToMany(mappedBy = "products")
private List<Member> members = new ArrayList<>();
νμ§λ§, μ€λ¬΄μμλ μ°κ²° ν μ΄λΈμμ λ¨μν μ°κ²°λ§ νκ³ λλμ§ μλλ€. μ¬κΈ° μμ μ£Όλ¬Έ μκ°μ΄λ μλ κ°μ λ°μ΄ν°κ° λ€μ΄κ° μ μμΌλ©° μΏΌλ¦¬κ° μ΄μνκ² λκ° μ λ μλ€.
λ€λλ€ νκ³μ 극볡
λ°λΌμ μ€κ° ν μ΄λΈμ λλ λ°©μμΌλ‘ λ°κΎΈμ΄ λ€λλ€λ₯Ό ꡬνν μ μλλ° μ¬κΈ°μλ μλ³ κ΄κ³μ λΉμλ³ κ΄κ³ λ°©μμΌλ‘ λλλ€.
μλ³κ΄κ³ - λ³΅ν© κΈ°λ³Έν€μ μ¬μ©
μλ³ κ΄κ³ λ°©μμ λΆλͺ¨ ν μ΄λΈμ κΈ°λ³Έ ν€λ₯Ό λ°μμ μμ μ κΈ°λ³Έ ν€ + μΈλ ν€λ‘ λ§λλ λ°©μμ΄λ€.
@Entity
@IdClass(MemberProductId.class)
public class MemberProduct {
...
@Id
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@Id
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
...
}
μ¦, κΈ°λ³Έν€μΈ _@Id_μ μΈλν€λ₯Ό λ§€ννλ _@JoinColum_μ λ λ€ μ¬μ©νμ¬ κΈ°λ³Έν€μ μΈλν€λ₯Ό ν¨κ» μ¬μ©ν λ°©μμ΄λ€.
_@IdClass_λ₯Ό ν΅ν΄μ μλ³μ ν΄λμ€λ₯Ό μ§μ ν μ μλλ°, μλ³μ ν΄λμ€λ μλμ κ°μ΄ λ§λ λ€.
public class MemberProductId implements Serializable {
private String member;
private String product;
// hashCode, equals
}
κ·Έλ¦¬κ³ μλ³μ ν΄λμ€λ₯Ό μ¬μ©ν΄μ μ΄λ₯Ό μ μ©ν μ μλλ°, μλ³μ ν΄λμ€λ λ€μ μμλ 무쑰건 ν¬ν¨ν΄μΌ νλ€.
- Serializableμ ꡬν
- equals, hashCode ꡬν
- κΈ°λ³Έ μμ±μ ꡬν
νμ§λ§, μ΄λ¬ν λ°©μμ 보λ€μνΌ κ½€λ 볡μ‘νλ€. λ°λΌμ λΉμλ³ κ΄κ³λ₯Ό ν΅ν΄ μ‘°κΈ λ μ½κ² μ¬μ©ν μ μλ€.
λΉμλ³κ΄κ³ - μλ‘μ΄ κΈ°λ³Έ ν€ μ¬μ©
λΉμλ³ κ΄κ³λ λ°μμ¨ μλ³μλ μΈλ ν€λ‘λ§ μ¬μ©νκ³ μλ‘μ΄ μλ³μλ₯Ό μΆκ°νλ λ°©μμ΄λ€.
λ°λΌμ μ€κ° ν μ΄λΈμ μλ‘μ΄ λ리ν€λ₯Ό μΆκ°νμ¬ μ¬μ©νλ€.
@Entity
public class MemberProduct {
...
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
...
}
μ΄λ κ² νλ©΄ μλ³μ ν΄λμ€λ₯Ό λ³λλ‘ λ§λ€μ§ μμλ λκΈ° λλ¬Έμ ν¨μ¬ μ½λκ° κ°λ¨ν΄μ§λ€. κ·Έλμ μ¬λ§νλ©΄ λΉμλ³ κ΄κ³λ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ κ°μ - μΈνλ°
μ λ μΌμνμ΄ μλλΌ νμνμΈκ°λ΄μ^^ νμ©νΈ λμ΄κ°λ€ 30% μ λ λ£κ³ λμ ν λ΅λ΅ν΄μ κΈ°λ³ΈνΈμ λ€μ΄λ²λ Έλ€μ^^. νμ£Ό νμ£Ό κΉμνλ κ°μ λ€μΌλ λ μ λλ λͺ¨μ΅μ μ€μ€λ‘ λλλλ€. νΉν μ€
www.inflearn.com
'π£ Spring > JPA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JPA] κ³ κΈ λ§€ν μμ보기 (1) | 2024.03.16 |
---|---|
[JPA] μ°κ΄κ΄κ³ λ§€νμ κΈ°μ΄ (4) | 2024.03.08 |
[JPA] JPA Entity λ§€ννκΈ° (0) | 2024.03.02 |
[JPA] JPAμ μμμ± κ΄λ¦¬μ λν΄ (2) | 2023.12.29 |