1. 엔티티타입
2. 값타입
@Entity로 정의하는 객체
데이터가 변해도 식별자로 지속해서 추적가능
-> pk만 있으면 해당 정보가 바뀌어도 구별 할수 있다
int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입
식별자가 없고(pk) 값만 있으므로 변경시 추적 불가
-> 10 -> 20 으로 변경하면 그 값 자체가 바뀌므로 그 이전값을 알수 없다.
- 값 타입은 크게 기본값타입, 임베디드 타입, 컬렉션 값 타입 으로 나누어진다.
String name, int age....
생명주기를 엔티티의 의존
-> 회원을 삭제하면 이름, 나이 필드도 삭제
값 타임은 공유하면 안된다
-> 회원 이름 변경시 다른 회원의 이름도 함께 변경되면 안된다
기본타입은 절대 공유 x , 하지만 래퍼 클래스는 같은 인스턴스를 공유하므로 공유 가능한 객체이지만 변경 x
-> 이것들이다 자바를 사용할때 사이트 이펙트 없이 안전하게 개발할수 있는 이유
쉽게 말해 공통점이 있는 값들을 묶어서 사용하는 값.
복합 값 타입이라고도 하며 새로운 값 타입을 직접 정의할 수 있다.
그러면 임베디드 타입은 왜 쓸까???
높은 응집력 및 재사용성
Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소
드를 만들 수 있음
임베디드 타입은 엔티티의 값일 뿐이다.
임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.
객체와 테이블을 아주 세밀하게(find-grained) 매핑하는 것이 가
능
잘 설계한 ORM 애플리케이션은 매핑한 테이블의 수보다 클래
스의 수가 더 많음
★ 임베디드 타입의 값이 null이면 매핑한 컬럼 값은 모두 null