JPA
JPA 데이터 타입 분류
수달하나
2021. 7. 20. 21:10
JPA 데이터 타입 분류
- 엔티티 타입
@Entity로 정의하는 객체
데이터가 변해도 식별자로 지속해서 추적이 가능하다.
- 값 타입
int, Integer, String 처럼 단순 값으로 사용하는 자바 기본 타입이나 객체.
식별자가 없고 값만 있으므로 변경시 추적이 불가능하다.
값 타입 분류
1. 기본값 타입
- 자바 기본타입(int, double)
- 래퍼 클래스(Integer, Long)
- String
→ 생명주기는 엔티티에 의존한다. 값 타입은 공유하면 안된다. (다른 저장공간을 갖는다)
2. 임베디드 타입 (복합 값 타입)
새로운 값 타입을 직접 정의할 수 있음
JPA는 임베디드 타입(embedded type) 이라고 부른다
int와 String 처럼 값 타입이라는 것이다.
→ 변경하면 끝
3. 컬렉션 값 타입 (Set, List ...)
값 타입을 하나 이상 저장할 때 사용
데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없기 때문에 별도의 테이블이 필요하다.
@ElementCollection, @CollectionTable 사용
값타입은 변경하면 추적이 어렵다.
컬렉션에 변경 사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다.
→ 따라서 이런 방식으로 실무에서 사용하면 안된다.
값 타입 컬렉션을 대신에서 일대다 관계를 고려하는것이 바람직하다.