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 사용

값타입은 변경하면 추적이 어렵다.

컬렉션에 변경 사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다.

 

→ 따라서 이런 방식으로 실무에서 사용하면 안된다.

값 타입 컬렉션을 대신에서 일대다 관계를 고려하는것이 바람직하다.