다대일 단방향
다대일 양방향
양방향이니 연관관계의 주인 개념이 필요하지
(ManyToOne,JoinColumn={외래 키}), (OneToMany,mappedBy={참조 필드}) 설정 필요
그리고 양방향이면 서로 참조해야 해서 연관관계 편의 메소드가 유용함.
@Entity
class Team{
...
@OneToMany
@JoinColumn(name="team_id") // 반대편 테이블의 외래 키를 관리..
private List<Member> members = new ArrayList<>();
...
}
메인 테이블에 외래 키가 있는 것이 좋다고 함...
메인 테이블은 (게시판, 첨부 파일) 관계에서 게시판쪽이라고 함..
예시) user와 addrress 관계
@Entity
class User{
...
@OneToOne
@JoinColumn(name = "address_id")
private Address address;
...
}
@Entity
class Address{
@Id @GeneratedValue
@Column(name = "address_id")
private Long id;
...
}
RDB는 다대다 관계 표현이 안 되서 연결 테이블을 사용.
@ManyToMany 쓰면 객체 수준에서는 명시적으로 연결 테이블 안 만들어도
연결 테이블 알아서 만들어주니까 편리할 것 같음..
하지만 연결 테이블로 풀어내서 쓰는게 더 좋다고 함..
회원-상품의 경우 주문이라는 연결 테이블이 생기는데, 주문 테이블에 회원과 상품의 id 값만 담지는 않는다고 함.
주문 수량, 주문 날짜 같은 컬럼이 추가되면 @ManyToMany 못 쓴다고 함..
@ManyToMany
@JoinTable(name = "...", joinColumns=@JoinColumn(name="...'),
inverseJoinColumns=@JoinColumn(name="..."))
private List<Item> items = new ArrayList<>();
방향성 측면에서 양방향 연관관계 쓰이나?
다중성 측면에서 일대다 연관관계 쓰이나?
책에서는 일대다 단방향보다 다대일 양방향을 쓰라고 권함.
관리할 외래 키가 다른 테이블에 있는 것은 부담스러운? 일이라고 함..
일대다 관계에서 반대편 테이블의 외래 키를 관리하는게 무슨 일이 일어나는건지 잘 모름
일대다 단방향 관계를 매핑할 때 @JoinColumn을 명시하지 않으면 조인 테이블 전략이 사용된다는데 잘 모름
@ManyToMany 못 쓰는 이유 잘 안 와닿음..