@Embedded : 사용하는 곳에 표시
@Embeddable : 값 정의 하는 곳에 표시
-> 둘중 하나만 써도 되긴 하는데, 둘다 쓰는게 권장됨
DB 입장에서 Mapping 테이블은 같다
잘 설계된 ORM application은 mapping한 테이블 수보다 클래스 수가 더 많다.
@AttributeOverrides 사용
이런식으로 사용하면 된다.
임베디드 타입 같은 값을 여러 entity에서 공유하면 위험하다.
ex)
member2.getHomeAddress().setCity("newCity");
만약 member1이 Address embeded type을 공유하고 있다면, member1의 값 역시 바뀜.
그래서 새로운 인스턴스를 만들어서 사용해야 한다.
--> Embeded type = 객체 타입
--> 그래서
값 타입은 불변객체로 설정해야 한다.
참고로 Integer와 String은 Java가 제공하는 불변 객체.
참조값간의 비교를 해야할 때
출력값 : false
( 설정은 default하면 됨 )