이 포스트는 인프런 김영한님의 '자바 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);