jpa 연관관계
객체의 연관관계는 단방향 관계이다. 하지만 데이터베이스는 양방향 관계다.
A -> B 객체밖에 접근만 가능하지만 데이터 베이스는 A <-> B 둘다 가능하다.
class A {
B b;
}
class B{
}
일반적으로 쓰는 단방향 연관관계다.
class A {
B b;
}
class B {
A a;
}
양방향 연관관계다.
정확하게는 서로 다른 단방향 관계 2개다.
- @ManyToOne
다대일 관계 매핑 정보다.
글로벌 페치 전략을 설정 할 수 있다. 즉시로딩, 지연로딩
- @JoinColumn
외래 키를 매핑 할 때 사용한다. 속성 중 name에 매핑할 외래 키 이름을 지정한다.
기본값은 필드명_참조하는 테이블의 기본키 컬럼명
- @OneToMany
일대다 관계 매핑 정보다.
글로벌 페치 전략을 설정 할 수 있다. 즉시로딩, 지연로딩
mappedBy 속성으로 연관관계 주인이 아님을 설정한다.
- @OneToOne
일대일 관계 매핑 정보다.
일대일 관계에선 테이블 중 어느 곳이나 외래 키를 가질 수 있다.
OneToMany처럼 mappedBy속성이 있어 연관관계 주인이 아님을 설정 할 수 있다.
- @ManyToMany
다대다 관계 매핑 정보다.
mappedBy를 통해 연관관계 주인이 아님을 설정 할 수 있다.
실질적으로 편하긴해도 실무에선 한계가 있다 그러므로 mapping 테이블을 만들어서 사용하자!
- 연관관계 주인
연관관계의 주인은 외래키가 있는 곳이 주인이다. 주인만이 등록, 수정, 삭제가 가능하다. 주인이 아닐경우엔 조회만 가능하다.
항상 ManyToOne이 연관관계의 주인이 되기 때문에 mappedBy 속성이 없다. 꼭 주인이 등록, 수정, 삭제를 하자!