해당 시리즈는 김영한님의 JPA 로드맵을 따라 학습하면서 내용을 정리하는 글입니다
@ManyToOne
@OneToMany
@OneToOne
@ManyToMany
Team
엔티티에서 members
에 Member
를 추가하게 되면 MEMBER
테이블의 외래키를 업데이트하는 쿼리가 추가적으로 나가게 되는 문제가 발생합니다@Entity
public class Team {
@OneToMany
@JoinColumn(name = "TEAM_ID")
List<Member> members = new ArrayList<>();
}
@Entity
public class Member {
@ManyToOne
// 읽기 전용으로 설정하기 위해서 insert와 update가 안되도록 합니다
@JoinColumn(name = "TEAM_ID", insertable = false, updatable = false)
private Team team;
}
mappedBy
를 설정해 주도록 합니다JPA
에서 지원하지 않습니다null
값이 들어갑니다DBA
분들이 장기적인 관점에서 선호하는 형태입니다// 단방향일 경우
@Entity
public class Member {
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
}
// 양방향일 경우
@Entity
public class Member {
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")
private List<Product> products = new ArrayList<>();
}
@Entity
public class Product {
@ManyToMany(mappedBy = "products")
private List<Member> members = new ArrayList<>();
}
Member_Product
라는 테이블이 생성되었고, 각각 FK
이자 PK
역할을 하는 값들이 생성되어 있습니다@Entity
public class MemberProduct {
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
}
@Entity
public class Member {
@OneToMany(mappedBy = "member")
private List<MemberProduct> memberProducts = new ArrayList<>();
}
@Entity
public class Product {
@OneToMany(mappedBy = "product")
private List<MemberProduct> memberProducts = new ArrayList<>();
}