네이버 클라우드 캠프

@ElementCollection_임베디드 테이블

99duuk 2024. 5. 31. 01:37

Member 클래스와 @ElementCollection의 관계

Member 클래스는 @ElementCollection을 사용하여 memberRoleList라는 필드에 여러 개의 MemberRole 객체를 포함합니다. @ElementCollection은 기본적으로 자식 엔티티가 부모 엔티티에 종속되며 독립적으로 존재하지 않는 경우에 사용됩니다.

연관관계 설명

  • 부모 엔티티: Member
    • Member 클래스는 데이터베이스에서 독립적으로 존재할 수 있는 엔티티입니다. 이 엔티티는 @Id로 정의된 기본 키 필드인 email을 가지고 있습니다.
  • 자식 엔티티: MemberRole
    • MemberRole은 독립적인 엔티티가 아니며, Member 엔티티에 종속됩니다. Member 엔티티는 여러 개의 MemberRole을 가질 수 있습니다.
  • 연관관계 주인: Member
    • @ElementCollection을 사용하여 Member 엔티티는 memberRoleList라는 컬렉션을 관리합니다. Member 엔티티는 연관관계의 주인으로, 데이터베이스에서 MemberRole 객체들을 관리합니다.

관계 설정 방법

@ElementCollection을 사용하여 memberRoleList 필드를 정의합니다. 이 어노테이션은 MemberRole 객체들이 독립적으로 존재하지 않고, Member 엔티티에 포함된다는 것을 의미합니다. 이 경우, MemberRole 클래스는 별도의 엔티티 클래스가 아니라 값 타입 클래스로 간주됩니다.

 

 


자식 엔티티가 부모 엔티티에 종속되며 독립적으로 존재하지 않는 경우, 해당 자식 엔티티의 테이블을 "임베디드 테이블" 또는 **"컬렉션 테이블"**이라고 부릅니다. 이러한 테이블은 일반적으로 부모 엔티티의 테이블과 일대다 관계를 가지며, 부모 엔티티의 생명주기에 종속됩니다.

주요 용어

  • 임베디드 테이블 (Embedded Table): 부모 엔티티의 테이블에 포함된 값 타입을 저장하기 위한 테이블입니다. 값 타입은 독립적으로 존재할 수 없으며, 부모 엔티티의 일부로 간주됩니다.
  • 컬렉션 테이블 (Collection Table): 부모 엔티티가 소유한 값 타입 컬렉션을 저장하기 위한 테이블입니다. 예를 들어, 부모 엔티티가 여러 개의 주소, 전화번호, 역할 등을 포함할 때 사용됩니다.

 

Member 엔티티가 여러 개의 MemberRole을 가질 수 있는 경우, MemberRole은 독립적인 엔티티가 아니라 값 타입이며, Member 엔티티에 종속됩니다. 이를 데이터베이스에 저장하기 위해 컬렉션 테이블이 사용됩니다.

 

 

컬렉션 테이블 생성 예시

Hibernate는 Member 엔티티의 memberRoleList 필드를 저장하기 위해 컬렉션 테이블을 생성합니다. 컬렉션 테이블은 다음과 같이 구성될 수 있습니다:

 

  • member_email: Member 엔티티의 기본 키를 참조합니다.
  • member_role: MemberRole 값 타입을 저장합니다.

이 테이블은 Member 엔티티와 MemberRole 값 타입 간의 일대다 관계를 나타내며, Member 엔티티가 삭제되면 관련된 MemberRole 값들도 삭제됩니다.

이러한 구조는 자식 엔티티가 부모 엔티티에 종속되며 독립적으로 존재하지 않는 경우에 사용됩니다.

'네이버 클라우드 캠프' 카테고리의 다른 글

claim  (0) 2024.06.01
React_{children}, import vs const-require  (0) 2024.05.31
CORS, CSRF  (0) 2024.05.31
JPA_엔티티 그래프  (0) 2024.05.28
JPA_값 타입 객체  (0) 2024.05.28