ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA 연관 관계 어노테이션의 속성 분석
    JPA 2024. 5. 4. 16:04

    JPA의 연관 관계를 정의하는 어노테이션에는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany가 있다.
    그리고 각 어노테이션에는 여러 가지 속성들로 관계를 더 명확히 정의하는 방법을 제공한다.
    이 글에서는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany의 각 속성의 목적과 사용 방법에 대해 알아보자.

    targetEntity

    • 목적: 연관 대상 엔티티 클래스를 지정한다.
    • 기본 값
      • *ToOne: 관계를 저장하는 필드 또는 프로퍼티의 타입. 즉, 어노테이션이 붙은 필드 또는 프로퍼티의 타입.
      • *ToMany: collection의 parameterized type. 단, collection이 Java generic을 사용하여 정의되었을 때에만 적용된다. 그 외의 경우에는 필수로 지정해야 한다.

    cascade

    • 목적: 연관 대상에게 연산을 전파할지 여부를 지정한다.
      • *ToMany의 경우, 대상 collection이 Map인 경우 Map의 value에 전파된다.
    • 기본 값: 아무 연산도 전파하지 않는다.

    fetch

    • 목적: 연관 대상 엔티티를 즉시 로딩할지 지연 로딩할지 지정한다.
    • 기본 값
      • *ToOne: 즉시 로딩(FetchType.EAGER)
      • *ToMany: 지연 로딩(FetchType.LAZY)

    optional

    • 목적: 관계가 필수인지 아닌지 지정한다. 만약 false로 지정하면 non-null 대상 엔티티가 항상 존재해야 한다.
      • *ToOne에만 존재하는 옵션이다. *ToMany의 경우에는 연관 대상이 복수(collection)이기 때문에 empty collection이 들어간다.
    • 기본 값: true (관계가 필수가 아니다. 즉, 연관 대상 엔티티가 null이어도 된다.)

    mappedBy

    • 목적: 관계를 소유하는 필드를 지정한다. 관계를 소유하지 않는 쪽에서만 지정해야 한다. 즉, 이 속성을 사용하는 쪽이 관계의 주인이 아니고, 관계의 주인인 쪽은 이 속성을 사용하지 않아야 한다.
    • 사용 방법
      • 단방향일 때: 사용하면 안 된다. 항상 관계의 주인이기 때문이다.
      • 양방향일 때
        • ManyToOne: 애초에 이 속성을 제공하지 않는다. 단방향, 양방향 모두 항상 관계의 주인이기 때문이다.
        • OneToMany: 꼭 사용해야 한다. 양방향에서는 항상 관계의 주인이 아니기 때문이다.
        • OneToOne, ManyToMany: 관계의 주인이 아닌 쪽에 사용해야 한다.

    orphanRemoval

    • 목적: 관계에서 제외된(관계가 끊어진) 엔티티를 삭제하고, 삭제 연산을 연관 엔티티로 전파한다.
      • OneTo* 관계에서만 제공한다.
    • 기본 값: false
Designed by Tistory.