JPA

값 타입

스파이더웹 2022. 9. 16. 14:18
728x90
반응형

JPA의 데이터 타입 분류

엔티티 타입

  • @Entity로 정의하는 객체
  • 데이터가 변해도 식별자로 지속해서 추적 가능
  • ex) 회원 엔티티의 키나 나이의 값을 변경해도 식별자로 인식가능

값 타입(불변을 만들어 사용하자)

  • 단순히 값으로 사용되는 자바 기본 타입이나 객체
  • 식별자가 없고 값만 있으므로 변경시 추적 불가
  • 예)숫자 1을 2로 변경하면 완전히 다른 값으로 대체

값 타입 분류

  • 기본 값 타입
  • 임베디드 타입
  • 컬렉션 값 타입

 

기본값 타입

- 생명주기를 엔티티에 의존

   ex) 엔티티를 삭제하면 기본 값 타입도 함께 삭제

 

- 값 타입은 공유 하면 안된다

임베디드 타입

새로운 값 타입을 직접 정의할 수 있다 

주로 기본 값 타입을 모아 만들어서 복합 값 타입이라고도 한다

 

예를들어 Member 엔티티에 집 주소를 가진다고 가정하면

Member 클래스에 필드값을 나열할 수 있지만 주소가 재사용될 수 있으므로 이러한 경우 임베디드타입으로 관리한다

@Embeddable
public class Address {

    private String city;
    private String street;
    private String zipcode;

    public Address() {
    }
}

Member Class
 @Embedded
 private Address address;

위의 코드처럼 사용해주면되는데,  임베디드 타입이 되는 클래스에 @Embeddable 어노테이션을 붙여주고, 사용할 클래스에서는 @Embedded 어노테이션을 붙여준다. 여기서 주의할점은 기본생성자를 만들어야한다

 

혹시 한 엔티티에 값은 값 타입을 사용하면 어떻게될까?

예를들어 Member 엔티티에 homeAddress 와 workAddress 필드가 2개이면 충돌이 발생하여 예외가 발생되는데 이러한 경우 @AttributeOverrides를 사용하여 처리하면된다

 

 

728x90
반응형