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
반응형