Raw JPA 매핑 기능

:: @OneToOne
- 일대일 관계를 나타내는 매핑 정보
- 1:1 관계를 지정하기에 앞서 이것이 꼭 물리적으로 테이블이 분리되어야 하는지에 대해 생각하기
- 1:1 관계로 구성 한다는 것은 결국 하나의 목적에 부합되는 공통된 데이터를 관리한다고 볼 수 있으며 이것은 하나의 테이블에서 관리 할 수 있는 데이타일 가능성이 높다는 의미
- 즉, 의도적 중복이 아니라면 사용할 일이 없음
- 의도적 중복 예시) 버블 구독상품을 사서 채팅방이 생길경우. 구독상품과 채팅방은 1:1 관계
:: @OneToMany
- 일대다 관계를 나타내는 매핑 정보
@OneToMany
가 단방향으로 쓰이면 문제가 발생할 수 있다
- 속도를 위해 기본적으로 FetchType 설정이 LAZY 로 설정되어 있습니다.
- 속성
- mappedBy : 연관관계의 주인 필드를 선택
- fetch : 글로벌 페치 전략 설정
- cascade : 영속성 전이 기능을 사용
- targetEntity : 연관된 엔티티의 타입 정보를 설정
:: @ManyToOne
- 다대일 관계를 나타내는 매핑 정보
- 속성
- optional (default true) : false로 설정하면 연관된 엔티티가 반드시 있어야 함.
- fetch : 글로벌 패치 전략 설정
- 기본이 EGEAR 로 설정되어있으나 실무에서는 기본 LAZY로 설정
- cascade : 영속성 전이 기능 사용
- targetEntity : 연관된 엔티티의 타입 정보 설정 (targetEntity = Member.class 식으로 사용)
:: @JoinColumn
- 외래 키 매핑 시 사용 (Join 을 요청하기 위한 매핑정보로 쓰인다.)
@ManyToOne
어노테이션과 주로 함께 쓰인다. (조인대상 컬럼 지정기능을 안쓸거면 생략해도 됨)
- name 속성은 매핑할 외래키의 이름
- 어노테이션을 생략해도 외래 키가 생성됨.
- 생략 시 외래키의 이름이 기본 전략을 활용하여 생성된다.
- 속성
- name : 매핑할 외래 키의 이름
- referencedColumnName : 외래 키가 참조하는 대상 테이블의 컬럼명
- foreignKey : 외래 키 제약조건 지정 (테이블 생성 시에만 적용됨)
- unique/nullable/insertable/updateable/columnDefinition/table :
@Column
의 속성과 같음
:: @ManyToMany
- 다대다 관계를 나타내는 매핑 정보 (N:M)
- 다대다 설정을 하게되면 중간 매핑테이블(JoinTable)이 자동으로 생성된다.
- 중간 매핑 테이블은 JPA상에서 숨겨져서(Entity 정의 없이) 관리된다.
- 매핑 테이블 관리가 불가능하여서 실무에서는 잘 사용하지 않는 기능
- 실무에서는 매핑 테이블 직접 정의
- TableA(
@OneToMany
) > MappingTable(@ManyToOne
, @ManyToOne
) > TableB(@OneToMany
)
복합키 사용
- PK 1개 - 단일키
- FK 2개 - 복합키 (PK 없이)
- 복합키 선언 방식 2가지 ->
@IdClass
, @EmbeddedId