tonykang22 / study

0 stars 0 forks source link

[JPA] 5장. 연관관계 매핑 기초 #131

Open callmeaxxe opened 1 year ago

callmeaxxe commented 1 year ago

목표

단방향 연관관계

image

객체 연관관계 vs 테이블 연관관계

객체 관계 매핑

@Entity
public class Member {
    ...
    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;
    ...
}
@Entity
public class Team {
    @Id
    @Column(name = "TEAM_ID")
    private String id;
    ...
}

@ManyToOne : 다대일(N:1) 관계 매핑 정보

@JoinColumn(name="TEAM_ID") : 외래 키 매핑시 사용

연관관계 사용

저장

조회

객체 그래프 탐색

Member member = em.find(Member.class, "member1");
Team team = member.getTeam(); // 객체 그래프 탐색

객체지향 쿼리 사용

String jpql = "select m from Member m join m.team t where t.name=:teamName";
List<Member> resultList = em.createQuery(jpql, Member.class)
        .setParameter("teamName", "팀1")
        .getResultList();

수정

Member member = em.find(Member.class, "member1");
member.setTeam(team2);

삭제

Member member = em.find(Member.class, "member1");
member.setTeam(null);

양방향 연관관계

image

image

@Entity
public class Member {
    ...
    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;
    ...
}
@Entity
public class Team {
    @Id
    @Column(name = "TEAM_ID")
    private String id;
    ...
    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<Member>();
    ...
}

연관관계의 주인

양방향 연관관계 저장 & 주의점

연관관계 편의 메소드

public void setTeam(Team team) {
    if (this.team != null) {
        this.team.getMembers().remove(this);
    }
    this.team = team;
    team.getMembers().add(this);
}