데이터베이스는 외래키 하나로 양 쪽 테이블 조인이 가능함. 그러나 객체는 참조용 필드가 있는 객체만 다른 객체를 참조함.
두 객체 사이에 하나의 객체만 참조용 필드를 가지면 단방향 관계,
두 객체가 모두 각각 참조용 필드를 가지면 양방향 관계.
객체 입장에서 양방향 관계를 하면 오히려 복잡해질 수 있음.
예를들어, User 엔티티는 많은 엔티티와 연관관계를 맺는데, 전부 불필요하게 양방향으로 매핑하면 복잡성이 증가한다.
그래서 기본적으로 단방향으로 매핑하고 나중에 객체탐색이 꼭 필요하다할때 역방향으로 매핑해주는게 좋음.
양방향일때 연관관계의 주인이 아니면 조회만 가능하게끔 실질적인 관계를 JPA에게 알려줘야 함.
연관관계의 주인을 정한다 = 외래키 관리자를 선택하는 것.
연관관계의 주인 = 외래키가 있는 곳.
자신이 연관관계의 주인이 아닌것을 표시하는것이 mappedBy.
주인이 아닌쪽은 읽기만 할 수 있다.
가장 많이 사용되는 연관관계.
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
private Team team;
}
- @OneToMany: 1:N 관계를 나타내는 어노테이션
- mappedBy: Member 테이블의 Team 변수명. private Team team; 이라고 선언했기 때문에 "team"이 된다.
양방향 매핑을 하면 순환참조 에러가 일어날 가능성이 높아 단방향 매핑을 해야한다는데?