본문 바로가기
JAVA & SPRING/JPA

JPA0 기본편(값 타입 컬렉션)

by 눈오는1월 2024. 3. 4.
728x90

본 내용은 인프런 김영한 강사님 JPA 기본 편 강의를 듣고 정리한 내용입니다.

https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 - 인프런

K-개빈 킹 이 수식어가 어울리는 강사, 대한민국에서 사투리가 가장 섹시한 강사, 내 프로젝트에 의존성으로 추가하고 싶은 강사 강의결제를 고민하는 분들께 1) 너무 훌륭한 강의입니다. 무엇보

www.inflearn.com

 

값 타입 컬렉션

말 그대로 값 타입을 컬렉션에 저장하면서 사용하는 것을 말한다.

관계형 데이터베이스는 내부적으로 테이블 내 컬렉션을 저장할 수가 없는데 이를 해결한다.

 

값 타입 컬렉션 사용법

@ElementCollection, @CollectionTable 어노테이션을 사용한다.

값 타입 컬렉션 사용법 예시

 

위 코드를 실행시켰을 때, 값 타입 같은 경우 라이프 사이클이 가지고 있는 엔티티가 관리하는 것을 알 수 있다.

즉 갑 타입 컬렉션은 영속성 전의 + 고아 객체 제거 기능을 필수로 가지고 있다고 볼 수 있다.

 

값 타입 컬렉션은 지연 로딩 전략을 사용한다

 

값 타입 컬렉션은 여러 제약사항이 존재한다.

1. 엔티티가 아니기에 식별자 라는 개념이 존재하지 않는다.

2. 1의 이유로 값이 변경하면 추적하기 힘들다.

3. 값 타입 컬렉션에 변경 사항이 발생했을 시에, 모든 값을 삭제 후 다시 저장하는 과정을 거친다.(원하는 값만 변경하지 못한다.)

4. 값 타입 컬렉션을 매핑하는 테이블은 기본키를 구성해야 한다. (nul이나 중복저장은 안 된다.)

 

그래서 실무에서는 위와 같은 제약 사항이 존재하기 때문에,  값 타입 컬렉션 대신 사황에 따라 일대다 관계를 고려한다

-> 일대다 관계로 엔티티를 만들고 영속성 전의 + 고아 객체 제거 기능을 넣어서 값 타입 컬렉션처럼 사용한다. 

 

728x90