🍃이 글은 inflearn에서 김영한의 스프링 부트와 JPA 실무 완전 정복 로드맵을 학습하고 작성한 것입니다.🍃
다중성 (양방향에서 앞 글자에 해당하는 엔티티가 연관관계 주인, 외래키 매핑이 된다.)
단방향, 양방향
양방향 연관관계의 주인
다대일 단방향
다대일 양방향
단점
일대다 단방향, 양방향 매핑보다는 참조가 필요 없더라도 추가해서 다대일 양방향 매핑을 사용하자.
일대일 관계는 그 반대도 일대일
1:1이므로 외래키에 데이터베이스 유니크 제약조건 추가해야한다.
일대일 단방향
일대일 양방향
대상 테이블에 외래키가 존재할 수 있다.
- @ManyToMany는 테이블을 단순히 연결할 뿐, 필요한 컬럼들을 추가할 수 없어서 사용하지 않는다.
그러면 다대다 상황에서는 어떻게 해야 할까?
@Entity
public class MemberProduct {
@Id @GenerateValue
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
// 원하는 컬럼 추가 가능
}
@Entity
public class Product {
@Id @GenerateValue
private Long id;
@OneToMany(mappedBy = "product")
private List<MemberProduct> memberProducts = new ArrayList<>();
}
@Entity
public class Member {
@Id @GenerateValue
private Long id;
@OneToMany(mappedBy = "member")
private List<MemberProduct> memberProducts = new ArrayList<>();
}
참고: 실무에서 엔티티를 생성할 때 생성자 패턴이나 자바 빈 패턴(setter)을 사용하지 않고, 빌더 패턴을 사용한다.