
이 포스트는 인프런 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'의 내용을 정리한 포스트 입니다.
Member와 Team 엔티티를 N:1 단방향 연관관계 매핑을 해보자Member는 하나의 Team에만 속할 수 있다.
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
...
}
Member의 입장에서는 Team은 @ManyToOne이다.@JoinColumn에 외래키의 정보를 넘겨줘야 한다.Member와 Team 엔티티를 N:1 양방향 연관관계 매핑을 해보자Member는 하나의 Team에만 속할 수 있고 Team은 여러 명의 Memeber를 가질 수 있다.
Member엔티티는 앞서 연관관계 매핑을 해주었으므로 이제 Team엔티티를 수정해보자.@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
...
}
Team의 입장에서 Member를 여러 개 가질 수 있으므로 리스트로 선언해주고 @OneToMany어노테이션을 달아준다. 이때 연관관계에 대한 정보를 MappedBy를 활용해서 Member의 team과 연관관계에 있음을 알려준다.객체의 경우 테이블의 외래 키를 관리하는 주인을 정해줘야한다.
Member테이블이 외래 키를 갖고 있으므로 주인으로 정한다.Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member();
member.setName("member1");
team.getMembers().add(member);
// 연관관계의 주인에 값을 반드시 설정해줘야한다.
members.setTeam(team);
em.persist(member);