Home 연관관계 엔티티 매핑
Post
Cancel

연관관계 엔티티 매핑

엔티티 맵핑

@JoinColumn

  • @JoinColumn은 외래 키를 매핑할 때 사용한다.
속성기능기본값
name매핑할 외래 키 이름필드명 +_+참조하는 테이블의 기본 키 컬럼명
referencedColumnName외래 키가 참조하는 대상 테이블의 컬럼명참조하는 테이블의 기본 키 컬럼명
foreignKey(DDL)외래 키 제약조건을 직접 지정할 수 있다. 
나머지@Column 속성과 일치 

@ManyToXXX , @OneToXXX

@ManyToOne

  • @ManyToOne 어노테이션은 다대일 관계에서 사용한다.
속성기능기본값
optionalfalse(내부 조인)로 설정하면 연관된 엔티티가 항상 있어야 한다.true
fetchFetchType 설정FetchType.EAGER
cascadeCascadeType 설정없음
targetEntity연관된 엔티티 타입 정보를 설정, 거의 사용하지 않음 

@OneToMany

  • @OneToMany 어노테이션은 일대다 관계에서 사용한다.
속성기능기본값
fetchFetchType 설정FetchType.LAZY
cascadeCascadeType 설정 
mappedBy연관관계의 주인 필드를 선택 
orphanRemovaltrue일 경우 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제 
targetEntity연관된 엔티티 타입 정보를 설정, 거의 사용하지 않음 

@OneToOne

  • @OneToOne 어노테이션은 일대일 관계에서 사용한다.
속성기능기본값
optionalfalse(내부 조인)로 설정하면 연관된 엔티티가 항상 있어야 한다.true
fetchFetchType 설정FetchType.EAGER
cascadeCascadeType 설정없음
mappedBy연관관계의 주인 필드를 선택 
orphanRemovaltrue일 경우 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제 
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()를 실행할 때 바로 전이가 발생하지 않고 플러시 호출시 전이
This post is licensed under CC BY 4.0 by the author.