JPA의 데이터 타입 분류
1. 엔티티 타입 (Entity Type)
- 정의: @Entity로 정의하는 객체
- 특징: 데이터가 변해도 식별자로 지속해서 추적 가능
2. 값 타입 (Value Type)
- 정의: int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
- 특징: 식별자가 없고 값만 있으므로 변경 시 추적 불가
- 특이사항:
- 자바의 기본 타입은 절대 공유되지 않음
- Integer 같은 래퍼 클래스나 String은 참조가 넘어가기 때문에 공유 가능
3. 임베디드 타입 (Embedded Type)
- 정의: 주소들을 모아 놓은 클래스 혹은 시간을 모아 놓은 클래스들을 의미
- 사용법: 해당 클래스를 @Entity 클래스에 사용하려면 @Embeddable 또는 @Entity 클래스의 해당 멤버 변수에 @Embedded를 사용
@Embeddable
public class Address {
// 필드 정의
}
@Entity
public class Member {
@Embedded
private Address address;
}
- 주의사항: 임베디드 클래스를 여러 엔티티에서 공유하게 될 경우 부작용 발생 가능
- 한 엔티티를 수정하면 동일한 레퍼런스를 가지기 때문에 다른 엔티티도 변경됨
- 이 경우 새 객체를 생성하여 사용해야 함
- 해결책: 임베디드 클래스를 불변 객체로 만들고, setter를 사용하지 않음
4. 값 타입 컬렉션 (Value Type Collection)
- 정의: 값 타입 컬렉션은 JPA의 영속성 컨텍스트와 고아 객체 제거 기능을 가짐
- 사용법: Member 클래스에서 값 타입 컬렉션을 사용하여 데이터를 쉽게 관리할 수 있음
@Entity
public class Member {
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "MEMBER_ID")
private List<AddressEntity> addressHistory = new ArrayList<>();
}
- 특징:
- 값 타입 컬렉션을 사용하면 영속성 전에 컬렉션에 포함된 모든 값이 저장됨
- 고아 객체 제거 기능으로 컬렉션에서 삭제된 값은 자동으로 삭제됨
요약
JPA의 데이터 타입은 엔티티 타입, 값 타입, 임베디드 타입, 값 타입 컬렉션으로 나뉩니다. 각각의 타입은 서로 다른 특징과 사용법을 가지며, 특히 임베디드 타입과 값 타입 컬렉션은 공유 및 변경에 주의가 필요합니다. 임베디드 타입은 불변 객체로 만들어 부작용을 방지하고, 값 타입 컬렉션은 고아 객체 제거 기능을 활용해 효율적으로 데이터를 관리합니다.
'JAVA > JPA' 카테고리의 다른 글
인프런 JPA 서비스 최적화 방법 "김영한" -PlusUltraCode- (0) | 2024.07.25 |
---|---|
인프런 JPA 8화 프록시와 연관관계 관리 "김영한 강사" -PlusUltraCode- (0) | 2024.07.23 |
인프런 JPA 10화 객체지향 쿼리 언어1 - 기본 문법 "김영한 강사" -PlusUltraCode- (1) | 2024.07.20 |
인프런 JPA 7화 고급 매핑 "김영한 강사" -PlusUltraCode- (0) | 2024.07.20 |
인프런 JPA 6화 다양한 연관관계 매핑 "김영한 강사" -PlusUltraCode- (0) | 2024.07.20 |