HyeLog
[κΉμν_μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ] 7. νλ‘μμ μ°κ΄κ΄κ³ κ΄λ¦¬ λ³Έλ¬Έ
[κΉμν_μλ° ORM νμ€ JPA νλ‘κ·Έλλ° - κΈ°λ³ΈνΈ] 7. νλ‘μμ μ°κ΄κ΄κ³ κ΄λ¦¬
shj718 2022. 6. 17. 17:54π©π» μ¦μ λ‘λ©κ³Ό μ§μ° λ‘λ©
π‘μ§μ° λ‘λ©(νλ‘μ)μ νμμ±
νμ : ν = N : 1 κ΄κ³μμλ μλμ κ°μ΄ Member μν°ν°μ @ManyToOne μΌλ‘ Team νλκ° λ€μ΄κ°κ² λλ€.
@Entity
public class Member extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
}
μ΄λ, λ©€λ²λ₯Ό μ‘°νν΄λ³΄λ©΄ νκΉμ§ μ‘°νλλ κ²μ λ³Ό μ μλ€.
Member findMember = em.find(Member.class, member.getId());
λ§μ½, μ°λ¦¬κ° λ©€λ² μ λ³΄λ§ μ‘°ννλ λ‘μ§μ μ¬μ©νλ€λ©΄, μ΄κ²μ λ§€μ° ν° λλΉμ΄λ€.
κ·Έλμ μ¬μ©νλ κ²μ΄ μ§μ° λ‘λ© LAZYλ₯Ό μ¬μ©ν΄μ νλ‘μλ‘ μ‘°ννλ λ°©λ²μ΄λ€.
π μ§μ° λ‘λ©
μ§μ° λ‘λ©μ μμ κ°μ μν©μμ, λ©€λ²μ 'ν'μ νλ‘μλ‘ μ‘°ννλ κ²μ΄λ€. μ¦, em.find()λ‘ λ©€λ²λ₯Ό κ°μ Έμ¬ λ λ©€λ²λ§ κ°μ Έμ€κ³ νμ κ°μ Έμ€μ§ μλλ€.
μ§μ° λ‘λ© μ€μ λ°©λ²μ μλμ κ°μ΄ @ManyToOneμ fetch μμ±μ LAZYλ‘ μ€μ νλ κ²μ΄λ€.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEAM_ID")
private Team team;
νλ‘μλ‘ μ‘°ννλ€λ κ²μ μλ―Έλ, μλμ κ°μ΄ find()λ₯Ό νλ μμ μμλ λ©€λ²λ§ κ°μ Έμ€κ³ (νμ νλ‘μ κ°μ²΄) μ΄ν getTeam()μ ν΅ν΄ νμ μ‘°ννλ μμ μμμΌ μ€μ λ‘ νμ κ°μ Έμ€λ κ²μ΄λ€.
Member findMember = em.find(Member.class, member.getId());
System.out.println("member.username = " + findMember.getUsername());
System.out.println("member.team.name = " + findMember.getTeam().getName()); // μ€μ Team DB μ‘°ν (νλ‘μ κ°μ²΄ μ΄κΈ°ν)
π μ¦μ λ‘λ©
μ¦μ λ‘λ©μ μλμ κ°μ΄ fetch μμ±μ EAGERλ‘ μ€μ νλ©΄ λλ€. κ·Έλ¬λ©΄ λ©€λ²λ₯Ό μ‘°νν λ νκΉμ§ μ λΆ μ‘°νλλ μΏΌλ¦¬κ° λκ°λ€.
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "TEAM_ID")
private Team team;
π©π» κΆμ₯ μ¬ν
@ManyToOne, @OneToOneμ λν΄νΈλ μ¦μ λ‘λ©μ΄λ€. (@OneToManyμ λν΄νΈλ μ§μ° λ‘λ©)
νμ§λ§, μ¦μ λ‘λ©μ μμμΉ λͺ»ν μΏΌλ¦¬κ° λ°μν μ μκΈ° λλ¬Έμ μ€λ¬΄μμλ λͺ¨λ μ°κ΄κ΄κ³μ μ§μ° λ‘λ©μ μ¬μ©ν΄μΌ νλ€. μ¦μ λ‘λ©μ μ¬μ©νμ§ λ§μ! μ¦μ λ‘λ©μ΄ νμν μν©μ΄λ©΄ JPQL fetch μ‘°μΈ or μν°ν° κ·Έλν κΈ°λ₯μ μ¬μ©νμ.