📍 다대일 단방향
📍 다대일 양방향
📍 일대다 단방향
일대다(1:N)에서 일(1)이 연관관계의 주인
테이블 일대다 관계는 항상 다(N) 쪽에 외래 키가 있음
객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이한 구조
@JoinColumn을 꼭 사용해야 함, 그렇지 않으면 조인 테이블 방식을 사용함 (중간에 테이블을 하나 추가함)
일대다 단방향 매핑의 단점
=> 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용하자
@JoinColumn(insertable=false, updatable=false)📍 주 테이블에 외래 키 단방향
📍 주 테이블에 외래 키 양방향
📍 대상 테이블에 외래 키 단방향
📍 대상 테이블에 외래 키 양방향
📝 일대일 정리
객체는 컬렉션을 사용해서 객체 2개로 다대다 관계 가능
관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없음
연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야함
@ManyToMany 사용
@JoinTable로 연결 테이블 지정
다대다 매핑: 단방향, 양방향 가능
다대다 매핑의 한계
다대다 한계 극복
@ManyToMany => @OneToMany, @ManyToOne@ManyToMany는 제약: 필드 추가 X, 엔티티 테이블 불일치@ManyToMany 사용 X@JoinColumn| 속성 | 기능 | 기본값 |
|---|---|---|
| name | 매핑할 외래 키 이름 | 필드명 + _ + 참조하는 테이블의 기본 키 컬럼명 |
| referencedColumnName | 외래 키가 참조하는 대상 테이블의 컬럼명 | 참조하는 테이블의 기본 |
| 키 컬럼명 | ||
| foreignKey(DDL) | 외래 키 제약조건을 직접 지정할 수 있음 이 속성은 테이블을 생성할 때만 사용함 | |
| unique nullable insertable updatable columnDefinition table | @Column의 속성과 같음 |
@ManyToOne| 속성 | 기능 | 기본값 |
|---|---|---|
| optional | false로 설정하면 연관된 엔티티가 항상 있어야 함 | TRUE |
| fetch | 글로벌 페치 전략을 설정함 | @ManyToOne=FetchType.EAGER @OneToMany=FetchType.LAZY |
| cascade | 영속성 전이 기능을 사용함 | |
| targetEntity | 연관된 엔티티의 타입 정보를 설정함 (이 기능은 거의 사용하지 않음) |
@OneToMany| 속성 | 기능 | 기본값 |
|---|---|---|
| mappedBy | 연관관계의 주인 필드를 선택함 | |
| fetch | 글로벌 페치 전략을 설정함 | @ManyToOne=FetchType.EAGER @OneToMany=FetchType.LAZY |
| cascade | 영속성 전이 기능을 사용함 | |
| targetEntity | 연관된 엔티티의 타입 정보를 설정함 (이 기능은 거의 사용하지 않음) |