Skip to main content

값 타입

·173 words·1 min· loading
Table of Contents
JPA - This article is part of a series.
Part 8: This Article

JPA의 값 타입은 Entity와 값 타입이 있다.

  • Entity : @Entity로 정의하며, 식별자로 추적 가능
  • 값 타입 : String처럼 단순히 값으로 사용 => 변경시 완전히 다른 값으로 대체됨(추적불가) equals()사용 (equals(),hashcode() 필요할수도)

임베디드 타입
#

@Embeddable,@Embedded

  • 기본 값 타입입을 모아 만든 복합 값 타입
  • 엔티티가 아닌 그냥 값임 => 엔티티에 생명주기를 의존 => 테이블은 변화없음
  • 또다른 임베디드타입이나 Entity를 내부에 가질 수 있음
  • 재사용이 가능하고, 응집도가 높아짐
  • 객체와 테이블을 세밀하게 매핑 가능
  • @Embedded 는 필요없지만 쓰는걸 권장

한 엔티티에서 같은 타입을 사용한다면, @AttributeOverride()사용 가능


불변객체
#

  • 임베디드 타입 같은 값 타입은, 여러곳에서 공유되면 위험함 (의도치 않은 변경)
  • 인스턴스를 복사해서 사용해야 함
  • 그러나, 코드 레벨에서 이를 막을 수 있는 방법이 없음 => 불변 객체 사용
  • 아예 객체 타입을 수정할 수 없게 만듬 => - 생성자로만 값을 설정, 수정자 ❌

값 타입 컬랙션
#

값 타입을 하나이상 저장할 때, @ElementCollection,@CollectionTable을 사용해 별도의 테이블 만듬

  • 지연로딩
  • CASCDE + 고아 제거 가능

주의!! : 값 타입은 추적이 불가능하기 때문에, 변경시 모든 값을 모두다시저장

따라서, 실무시에는 일대다 관계를 만들고, CASCADE+ orphanRemoval을 사용 이런 경우에는, 1:N 연관관계의 주인이 1쪽이 될 수도 있음

JPA - This article is part of a series.
Part 8: This Article