JPA의 데이터 타입 분류
엔티티 타입
· @Entity로 정의하는 객체
· 데이터가 변해도 식별자로 지속해서 추적 가능
값 타입
· int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
· 식별자가 없고 값만 있기 때문에 변경 시 추적 불가
값 타입 분류
· 기본 값 타입
- 생명주기를 엔티티에 의존 (회원을 삭제하면 이름, 나이 필드도 함께 삭제)
- 값 타입은 공유 X (회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안됨)
· 임베디드 타입(embedded type, 복합 값 타입)
- 새로운 값 타입을 직접 정의할 수 있음
- 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함
- @Embeddable: 값 타입을 정의하는 곳에 표시
- @Embedded: 값 타입을 사용하는 곳에 표시
- 기본 생성자 필수
· 컬렉션 값 타입(collection value type)
- 값 타입을 하나 이상 저장할 때 사용
- @ElementCollection, @CollectionTable 사용
- 데이터베이스는 컬렉션을 같은 테이블에 저장 X
- 컬렉션을 저장하기 위한 별도의 테이블 필요
값 타입과 불변 객체
불변 객체
· 객체 타입을 수정할 수 없게 만들면 부작용을 원천 차단
· 값 타입은 불변 객체(immutable object)로 설계해야 함
· 불변 객체: 생성 시점 이후 절대 값을 변경할 수 없는 객체
· 생성자로만 값을 설정하고 수정자(Setter)를 만들지 않으면 됨
ex) Integer, String
값 타입 비교
· 동일성(identity) 비교: 인스턴스의 참조 값을 비교 '==' 사용
· 동등성(equivalence) 비교: 인스턴스의 값을 비교 'equals()' 사용
· 값 타입은 a.equals(b)를 사용해서 동등성 비교 해야함
'Spring Study > JPA 기본' 카테고리의 다른 글
[JPA] 객체지향 쿼리 언어(JPQL) (0) | 2023.11.07 |
---|---|
[JPA] 프록시와 연관관계 관리 (1) | 2023.11.01 |
[JPA] 고급 매핑 (0) | 2023.10.31 |
[JPA] 다양한 연관관계 매핑 (0) | 2023.10.30 |
[JPA] 연관관계 매핑 (0) | 2023.10.18 |
댓글