* ν΄λΉ κΈμ κΉμν κ°μ¬λμ μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈμ λ³΄κ³ κ°λ¨νκ² μ 리ν κΈμ λλ€.(μμΈν λ΄μ©μ κ°μκ° μ΅κ³±λλ€. κ°μ μ¬μΈμ)
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ κ°μ - μΈνλ°
νμ¬λμ λ§€μΌ λ°μ μμ€μ νμμ΄λΌλ λ€λκΉ μκ°νλλ° λ§μΉ¨ JPA κ°μκ° μ겨μ κΏ νμ΄λ°μ΄λ€μ. μ λ μ΄ μ μ JPA μ± μ λ³΄κ³ κ³΅λΆ νμλλ°μ κΆκΈνλ μ , μ 무μ μ μ©νλ©° κ³ λ―Όνκ³ ν΄κ²°ν
www.inflearn.com
Intro
JPAλ₯Ό μ¬μ©νκΈ° μν΄ κ°μ²΄ μ§ν₯μμμ μ°κ΄κ΄κ³μ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμμ μ°κ΄κ΄κ³λ₯Ό μ λλ‘ λ§€ννλ κ²μ΄ ν΅μ¬μ΄λ€.
λ°λΌμ κ°μ²΄ μ§ν₯μμ ν μ΄λΈμ λν μ°κ΄κ΄κ³λ₯Ό μ λλ‘ μ΄ν΄ν νμκ° μλλ°, μ΄λ μ©μ΄λΆν° μ λλ‘ μμμΌ νλ€.
μ°μ κ° μν°ν°μ μ μ₯μμ μ°κ΄κ΄κ³λ₯Ό λ§Ίκ³ μλ λ°©ν₯μΌλ‘ μ°Έμ‘°κ° κ°λ₯ν κ°μ λ°λΌ μλ°©ν₯, λ¨λ°©ν₯μΌλ‘ λλλ€.
κ·Έλ¦¬κ³ ν μ΄λΈμμ PKμ FKλ₯Ό ν΅ν΄ μ μ₯νλ λ°©μμΌλ‘ μ°κ΄κ΄κ³λ₯Ό ꡬμΆνλ€λ©΄ κ°μ²΄λ€κ°μ νλ ₯ κ΄κ³λ₯Ό ꡬμΆνλ κ²μ΄ μ΄λ €μμ§λ€. κ²°κ΅ κ°μ²΄μ§ν₯μ λͺ©μ μ κ°μ²΄λ€μ΄ ν¨μ¨μ μΈ νλ ₯ κ΄κ²λ₯Ό νμ±νλ κ²μ΄ μ€μνκΈ° λλ¬Έμ΄λ€.
κ·Έλ°λ°, Idλ₯Ό λΌμλ£λ λ°©μμΌλ‘ λ§λ λ€λ©΄ κ°μ²΄ μ€μ¬μ μ΄μ§ λͺ»ν κ²μ΄λ€. λ°λΌμ ν μ΄λΈμ μ°κ΄κ΄κ³λ₯Ό κ°μ²΄λ€κ°μ μ°κ΄κ΄κ³λ‘ μ λλ‘ λ°κΎΈμ΄ μ£Όμ΄μΌ νλ€.
κ·Έ λ°©μμΌλ‘ λ€λμΌ, μΌλλ€, μΌλμΌ, λ€λλ€ κ΄κ³λ₯Ό μ λλ‘ μ΄ν΄ν νμκ° μλ€.
λν μ°κ΄κ΄κ³μ μ£ΌμΈμ μ€μ νλ κ²μ΄ μ€μνλ°, κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμλ FKλ₯Ό κ΄λ¦¬νκ³ μλ ν μ΄λΈμ΄ μ‘΄μ¬νλ―μ΄, κ°μ²΄μκ² μμ΄μλ μΈλν€λ₯Ό κ΄λ¦¬ν κ°μ²΄κ° νμνλ€.
μ΄μ λΆν°, κ° μ°κ΄κ΄κ³μ μ°κ΄κ΄κ³μ μ£ΌμΈμ μ΄λ»κ² μ€μ ν΄μΌνλ μ§ μ΄ν΄λ³΄μ.
λ¨λ°©ν₯ μ°κ΄κ΄κ³
Member(λ©€λ²)μ Team(ν)μ κ΄λ¦¬νλ μν©μ μκ°ν΄λ³΄μ. κ° νμ μ¬λ¬ λͺ μ λ©€λ²λ₯Ό κ°μ§ μ μμ κ²μ΄λ€. μ¬κΈ°μ μΆκ°ν΄μ€ μ΄λ Έν μ΄μ μ λ¨μνλ€.
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team
Member μ μ₯μμλ _@OneToMany_, Team μ μ₯μμλ _@ManyToOne_μ μΆκ°ν΄μ£Όλ©΄ λκ² λ€.
ν μ΄λΈκ³Όμ μ°¨μ΄μ μ μλμ κ°λ€.
- ν
μ΄λΈ
- ν μ΄λΈμ μΈλν€λ‘ μ°κ΄κ΄κ³λ₯Ό κ΄λ¦¬νλ€.
- ν μ΄λΈμ μ°κ΄κ΄κ³λ μλ°©ν₯μ΄λ€.
- κ°μ²΄
- κ°μ²΄λ μ°Έμ‘°λ‘μ¨, μ°κ΄κ΄κ³λ₯Ό λ§Ίλλ€.
- μ°Έμ‘°λ₯Ό μ¬μ©νλ κ°μ²΄μ μ°κ΄κ΄κ³λ λ¨λ°©ν₯μ΄λ€.
Team findTeam = findMember.getTeam();
System.out.println("findTeam = " + findTeam.getName());
μ°κ΄κ΄κ³λ₯Ό μ μ₯νκ³ , μ‘°ννκ³ , μμ νλ μ½λκ° λ°μ΄ν° μ€μ¬μ μ½λμλ λ€λ₯΄λ€. λ°μ΄ν° μ€μ¬μ μ½λλ Idλ₯Ό κΈ°λ°μΌλ‘ νμνμ¬ μ‘°ννκ±°λ, μμ νλ μμ μ κ±°μ³€μ§λ§, κ°μ²΄ μ§ν₯ μ€μ¬μ μ½λλ κ·Έλ μ§ μλ€.
μ Memberμμ Teamμ μ‘°ννλ κ²λ§ 보μλ, μ°Έμ‘°λ‘μ¨ Teamμ μ»μ§ Idλ₯Ό ν΅ν΄ μ»μ§ μλλ€.
μλ°©ν₯ μ°κ΄κ΄κ³
μ΄μ μ Memberμμ TeamμΌλ‘ μ‘°νν μ λ°μ μμλ, λ€λμΌ λ¨λ°©ν₯ λ§€νμ΄ μλλΌ, λ°λ λ°©ν₯μΈ Teamμμ Memberλ₯Ό μ‘°νν μ μλλ‘ ν΄λ³΄μ.(μ¦, μλ°©ν₯ μ°κ΄κ΄κ³λ λ°λμͺ½μμ κ°μ²΄ κ·Έλν νμμ΄ κ°λ₯ν΄μ§κ² μ λΆμ΄λ€.)
λ€λ§, μ΄μ μ λ§νλ―μ΄ ν μ΄λΈμ μ°κ΄κ΄κ³λ μλ°©ν₯μ΄λ€. FK νλλ§μΌλ‘ μμͺ½μμ μ κ·Όμ΄ κ°λ₯νκΈ° λλ¬Έμ κ΅³μ΄ ν μ΄λΈμ ꡬ쑰λ₯Ό λ°κΏ νμκ° μλ€.
λ°λΌμ μΆκ°ν΄ μ£Όμ΄μΌ ν λΆλΆμ Team μν°ν° λΏμ΄λ€.
@Entity
public class Team {
...
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<Member>();
}
Team μν°ν°μμλ λ¨μν _@OneToMany(mappedBy = "λ°λμͺ½ λ§€ν νλ μ΄λ¦")_μ μ£Όλ©΄ λλ€. κ·Έλ¦¬κ³ μλμλ List νμ μΌλ‘ λ°λμͺ½ μν°ν°λ₯Ό λ£μ΄μ€λ€. μ΄μ κ°μ²΄ κ·Έλν λ΄μμ Teamμμ Memberλ‘μ μ‘°νκ° κ°λ₯ν κ²μ΄λ€.
νμ§λ§ μ΄λ κ² λλ©΄ ν κ°μ§ μλ¬Έμ΄ μκΈ΄λ€. "μΈλ ν€λ νλμΈλ°, κ°μ²΄μ μ°Έμ‘°λ λ κ³³μ΄λ λλ€?" λ§λ λ§μ΄λ€. κ°μ²΄μ μ°Έμ‘°κ° λ κ°μ΄κΈ° λλ¬Έμ λ μ€μμ μΈλ ν€λ₯Ό κ΄λ¦¬ν΄ μ€ κ°μ²΄κ° νμν κ²μ΄λ€.
μλ°©ν₯ μ°κ΄κ΄κ³ : μ°κ΄κ΄κ³μ μ£ΌμΈ
μμ λ§νλ―, κ°μ²΄ μ°Έμ‘°κ° 2κ°κ° λλ μν©μμ μ°λ¦¬λ μΈλ ν€λ₯Ό κ΄λ¦¬ν΄ μ€ κ°μ²΄λ₯Ό μ°ΎμμΌ νλ€. κ·Έ κΈ°μ€μ λ°λ‘ μ°κ΄κ΄κ³μ μ£ΌμΈμ μ°Ύλ κ²μ΄λ€.
μ°κ΄κ΄κ³μ μ£ΌμΈμ λ°μ΄ν°λ² μ΄μ€ μ°κ΄κ΄κ³μ λ§€νλμ΄ μΈλν€λ₯Ό κ΄λ¦¬νλ€. λ°λ©΄, μ£ΌμΈμ΄ μλ μͺ½μ λ¨μν μ½κΈ°λ§μ΄ κ°λ₯νλ€.
μ°λ¦¬κ° κΈ°μ΅ν κ²μ λ³κ±° μλ€. λ¨μν _mappedBy_κ° μ¬μ©λλ κ³³μ μ£ΌμΈμ΄ μλκ³ κ·Έ μμ±μΌλ‘ μ£ΌμΈμ μ ν΄μΌ νλ€.
λν μ£ΌμΈμ μ νλ λ°©λ²μ μΈλ ν€ κ΄λ¦¬μλ₯Ό μ ννλ κ²μ΄λ©°, μΈλν€λ μΌλλ€μμ λ€μ κ΄κ³μ μλ Member ν μ΄λΈμ΄ μ§λλ€.
μ¦, μ°κ΄κ΄κ³μ μ£ΌμΈμ μΈλ ν€κ° μλ κ³³μ΄λ©° μΌλλ€, λ€λμΌ κ΄κ³μμλ λ€ μͺ½μ΄ νμ μΈλν€λ₯Ό κ°μ§λ€.
λ νλ κΈ°μ΅ν΄ λ μ μ΄ μλ€. μ°κ΄κ΄κ³μ μ£ΌμΈμ κ°μ μ€μ ν΄μ£Όλ©΄ κ·Έλλ‘ λ°μ΄ν°λ² μ΄μ€μ λ°μλμ§λ§, μ£ΌμΈμ΄ μλ μͺ½μ κ°μ μ€μ ν΄μ£Όμ΄λ 무μλλ€. μλ μλ₯Ό 보μ.
team1.getMembers().add(member1);
μ΄ κ²½μ°, teamμ μ°κ΄κ΄κ³μ μ£ΌμΈμ΄ μλκΈ° λλ¬Έμ ν΄λΉ ꡬ문μ 무μλλ€.
member1.setTeam(team1);
λ°λ©΄, μμ κ²½μ° memberλ μ°κ΄κ΄κ³μ μ£ΌμΈμ΄κΈ° λλ¬Έμ 무μλμ§ μκ³ λ°μλλ€.
κ·Έλ λ€λ©΄ μλμ κ²½μ°λ§ μ°λ©΄ λκ² λ€? μκ°μ΄ λ λ€. νμ§λ§, μ€μ λ‘λ λ λ€ μ€μ ν΄μΌ νλ€. μλνλ©΄ λ°μ΄ν°λ² μ΄μ€μ λ°μλμ§ μκ³ , 1μ°¨ μΊμμλ§ λ°μλ μνμμλ Team κ°μ²΄μμ memberκ° μΆκ°λμ§ μμΌλ©΄ μλκΈ° λλ¬Έμ΄λ€.
λ€μλ§ν΄, κ°μ²΄κΉμ§ κ³ λ €ν΄μ μ£ΌμΈμ΄ μλ κ³³μλ κ°μ μ λ ₯ν΄μ£Όμ΄μΌ νλ€.
π μ°κ΄κ΄κ³ νΈμ λ©μλ
μμͺ½ μ λΆ μ κ²½ μ¨μ£Όλ μ½λλ₯Ό λ°λ‘ λ§λ€μ΄μ£Όμ. λ κ°μ²΄ μ€ νΈν κ³³ μ무 κ³³μμ setTeam μ½λμ μμͺ½ λͺ¨λ μΆκ°ν΄μ£Όλ μ½λλ₯Ό μμ±ν΄μ£Όλ©΄ λλ€.
μ΄λ μ£Όμν μ μ κΈ°μ‘΄μ κ°μ΄ μλ μ§ νμΈνκ³ μ κ±°ν΄μ£Όλ μ½λλ νμνλ€.
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ κ°μ - μΈνλ°
νμ¬λμ λ§€μΌ λ°μ μμ€μ νμμ΄λΌλ λ€λκΉ μκ°νλλ° λ§μΉ¨ JPA κ°μκ° μ겨μ κΏ νμ΄λ°μ΄λ€μ. μ λ μ΄ μ μ JPA μ± μ λ³΄κ³ κ³΅λΆ νμλλ°μ κΆκΈνλ μ , μ 무μ μ μ©νλ©° κ³ λ―Όνκ³ ν΄κ²°ν
www.inflearn.com
'π£ Spring > JPA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JPA] κ³ κΈ λ§€ν μμ보기 (1) | 2024.03.16 |
---|---|
[JPA] λ€μν μ°κ΄κ΄κ³ λ§€ν μμ보기 (2) | 2024.03.09 |
[JPA] JPA Entity λ§€ννκΈ° (0) | 2024.03.02 |
[JPA] JPAμ μμμ± κ΄λ¦¬μ λν΄ (2) | 2023.12.29 |