연관관계 매핑
2022. 1. 25. 16:14
반응형
단방향 연관관계
- 객체 관점
- 한쪽 객체에서만 참조가 가능
- 다른 한쪽 객체에서는 참조가 불가능한 관계
- 테이블 관점
- 한쪽 테이블에서 다른 한쪽 테이블의 FK를 가지고 있음
- FK를 통해 같이 조회가 가능
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
}
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "team_id")
private Long id;
}
양방향 연관관계
- 객체 관점
- 양쪽 객체에서 모두 참조가능
- 한쪽 객체에서 연관관계의 주인이 된다.
- 테이블 관점
- 단방향 연관관계와 동일하다.
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
}
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "team_id")
private Long id;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
}
양방향 연관관계 특징
- 반드시 연관관계 주인이 있어야 한다.
- 외래키가 있는 곳을 주인으로 설정해야 한다.
- 연관관계 주인이 데이터를 수정, 삭제를 할 수 있다.
- 연관관계 주인이 아닌 다른쪽은 읽기(조회)만 가능하다.
양방향 연관관계 주의사항
- 연관관계 주인이 아닌곳에만 연관관계를 설정하면 엔티티를 영속화할 때 값이 들어가지 않는다!
Team team = new Team();
em.persist(team);
Member member = new Member();
team.getMembers().add(member); //연관관계 주인이 아닌곳에만 연관관계 설정!
em.persist(member);
- 연관관계 주인한테 연관관계를 설정해야한다!
- 테이블이 아닌 객체의 관점에서 봤을때에는 양쪽 다 연관관계를 설정해야한다.
Team team = new Team();
em.persist(team);
Member member = new Member();
member.setTeam(team); //연관관계 설정
team.getMembers().add(member); //team에서 member를 조회하기 위한 객체 연관관계 설정
em.persist(member);
반응형
'JPA' 카테고리의 다른 글
값 타입 (0) | 2022.02.02 |
---|---|
프록시와 연관관계 관리 (0) | 2022.02.02 |
상속관계 매핑과 @MappedSuperclass (0) | 2022.01.31 |
엔티티 매핑 (0) | 2022.01.20 |
영속성 관리 - 영속성 컨텍스트 (0) | 2021.05.17 |