다중성
단방향 양방향
연관관계 주인
일대다 단방향 관계를 맺고 싶다면?
가능하다. 아래처럼 연관관계를 설정해야한다
하지만 외래키가 멤버에 있어 멤버 테이블에 대한 쿼리가 발생하기 때문에 헷갈릴 수 있다
단뱡향만 필요해도 그냥 양방향으로 설정하자
@Entity
public class Team {
...
@OneToMany
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<>();
...
}
@Entity
public class Team {
...
@ManyToOne
// JoinColumn이 양쪽에 연결돼 JPA가 연관관계 주인을 알 수 없기 때문에
// insertable, updatable을 false로 설정한다
@JoinColumn(name = "TEAM_ID", insertable = false, updatable = false)
private Team team;
...
}
외래 키를 아무 테이블에나 넣을 수 있다
외래 키에 유니크 제약을 추가해 보장할 수 있다
다대일 단뱡향과 비슷하다
@Entity
public class Member {
...
@OneToOne
@JoinColumn(name = "LOCKER_ID)
private Locker locker;
...
}
대상 테이블에 외래키 단방향 관계를 설정할 수는 없다. 무조건 연관관계 주인과 외래 키를 가진 테이블을 일치 시키자
주 테이블에 외래 키 vs 대상 테이블에 외래 키
주 테이블에 외래 키
대상 테이블에 외래키
@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<>();
...
}