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 |