JPA기본 pdf 중 '06. 연관관계 매핑 기초' 내용이다

 

엔티티를 컨트롤러에서 반환 절대 하지마라!

무한루프가 발생할 수 있고, 엔티티에 변경이 있을 시 API 스펙이 달라진다

컨트롤러에서는 dto 사용하자 

-연관관계 매핑시 고려사항 3가지

1. 다중성

2. 단방향, 양방향

3. 연관관계의 주인 

 

1. 다중성

다대일: @ManyToOne

일대다: @OneToMany

일대일: @OneToOne

다대다: @ManyToMany

 

2. 단방향, 양방향

-테이블

외래키 하나로 양쪽 조인 가능

사실 방향이라는 개념이 없다

 

-객체 

참조용 필드가 있는 쪽으로만 참조 가능

한쪽만 참조하면 단방향

양쪽이 서로 참조하면 양방향 

 

3.연관관계의 주인

테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음

객체 양방향 관계는 a->b, b->a처럼 참조가 2군데이다

객체 양방향 관계는 참조가 2군데 있다. 둘 중 테이블의 외래키를 관리할 곳을 지정해야한다

연관관계 주인은 외래키를 관리하는 참조

주인의 반대편(양방향에서)은 외래키에 영향을 주지 않고, 단순조회만 가능하다 

 

테이블에서는 다(n)쪽에 외래키 참조를 넣어야 한다

다대일에서는 ‘다’가 연관관계 주인이고

일대다에서는 연관관계 주인이다

실무에서 주로 사용하는 것은 다대일이라서 다대일을 중심으로 기록하려 한다 

 

-다대일 단방향

가장 많이 사용하는 연관관계이고, 반대는 일대다이다.

-다대일 양방향

외래 키가 있는 쪽이 연관관계의 주인이고

양쪽을 서로 참조하도록 개발한다

 

@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
연관된 엔티티의 타입 정보를 설정한다. 이 기능은 거 의 사용하지 않는다. 컬렉션을 사용해도 제네릭으로 타 입 정보를 알 수 있다.
 

 

+ Recent posts