엔티티 맵핑
@JoinColumn
- @JoinColumn은 외래 키를 매핑할 때 사용한다.
속성 | 기능 | 기본값 |
---|---|---|
name | 매핑할 외래 키 이름 | 필드명 +_+참조하는 테이블의 기본 키 컬럼명 |
referencedColumnName | 외래 키가 참조하는 대상 테이블의 컬럼명 | 참조하는 테이블의 기본 키 컬럼명 |
foreignKey(DDL) | 외래 키 제약조건을 직접 지정할 수 있다. | |
나머지 | @Column 속성과 일치 |
@ManyToXXX , @OneToXXX
@ManyToOne
- @ManyToOne 어노테이션은 다대일 관계에서 사용한다.
속성 | 기능 | 기본값 |
---|---|---|
optional | false(내부 조인)로 설정하면 연관된 엔티티가 항상 있어야 한다. | true |
fetch | FetchType 설정 | FetchType.EAGER |
cascade | CascadeType 설정 | 없음 |
targetEntity | 연관된 엔티티 타입 정보를 설정, 거의 사용하지 않음 |
@OneToMany
- @OneToMany 어노테이션은 일대다 관계에서 사용한다.
속성 | 기능 | 기본값 |
---|---|---|
fetch | FetchType 설정 | FetchType.LAZY |
cascade | CascadeType 설정 | |
mappedBy | 연관관계의 주인 필드를 선택 | |
orphanRemoval | true일 경우 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제 | |
targetEntity | 연관된 엔티티 타입 정보를 설정, 거의 사용하지 않음 |
@OneToOne
- @OneToOne 어노테이션은 일대일 관계에서 사용한다.
속성 | 기능 | 기본값 |
---|---|---|
optional | false(내부 조인)로 설정하면 연관된 엔티티가 항상 있어야 한다. | true |
fetch | FetchType 설정 | FetchType.EAGER |
cascade | CascadeType 설정 | 없음 |
mappedBy | 연관관계의 주인 필드를 선택 | |
orphanRemoval | true일 경우 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제 | |
targetEntity | 연관된 엔티티 타입 정보를 설정, 거의 사용하지 않음 |
FetchType
- FetchType.LAZY : 연관된 엔티티를 실제 사용할 때 조회한다.
- FetchType.EAGER : 엔티티를 조회할 때 연관된 엔티티를 함께 조회한다.
- 주의점 1 : 컬렉션을 하나 이상 즉시 로딩하는 것을 권장하지 않음
- 주의점 2: 컬렉션 즉시 로딩은 항상 외부 조인을 사용한다.
CascadeType
- CascadeType.ALL : 아래 속성을 모두 적용
- CascadeType.ALL + orphanRemoval = true 를 동시에 사용하면 부모 엔티티가 자식의 생명주기를 관리할 수 있다. 즉, 삭제 등록을 부모에서 처리가능하다.
- CascadeType.PERSIST : 부모를 영속화할 때 연관된 자식들도 함께 영속화 할때 사용
- 저장할때 함께 저장될 수 있도록 설정한다.
- CascadeType.MERGE : 자식 엔티티와 병합 작업을 지속할때 사용
- 조회후 업데이트할때 사용
- CascadeType.REMOVE : 부모를 삭제할때 연결된 자식들도 함께 삭제
- CascadeType.REFRESH : 데이터베이스로부터 인스턴스 값을 다시 읽어 올때 자식 엔티티까지 새로고침
CascadeType.DETACH : 영속성 컨텍스트에서 엔티티를 제거할때 연관된 자식들도 제거
- 추가정보 :
- Cascade.PERSIST , REMOVE는 em.persist(), em.remove()를 실행할 때 바로 전이가 발생하지 않고 플러시 호출시 전이