상속관계매핑
조인테이블 전략

@Inheritance
를 사용하기 위해서는 부모 클래스가 추상 클래스여야 함
- Join 방식은 item entity의 id를 fk로 가지는 여러 entity가 만들어지는 방법임
- 테이블이 각각 만들어짐
싱글 테이블전략

- @DiscriminatorColumn(name=”DTPYE”) 이런 식으로 부모 클래스에 정의해주고 자식 클래스에는 @DiscriminatorValue로 어노테이션을 붙여주어야 함
- 테이블이 여러개 생기는게 아니라, Item이라는 테이블만 생기고 그 테이블의 특정 컬럼(DTYPE) 에 Food Car, Furniture의 값이 들어가게됨
- 현업에서는 테이블 갯수 많아지면 관리 힘들어서 싱글테이블 전략을 더 많이 사용함
@MappedSuperclass
- 실제 entity가 되는 클래스는 아니지만 상속을 받게되면 자식 테이블에서 추가로 상위 클래스의 필드 값을 추가로 갖게 됨
- 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장
식별자 클래스
- JPA에서 식별자를 둘 이상 사용하려면 별도의 식별자 클래스를 만들어야 함
- 두 개의 @Id 중 어떤것을 이용해서 동등성 비교를 해야 할지 몰라 RuntimeError 발생
@IdClass (비추) ⇒ 객체지향스럽지 않음
@IdClass 에서 지켜야할 규칙
- Serializable 인터페이스를 구현해야 한다.
- eqauls, hashCode를 구현해야 한다.
- 기본 생성자가 있어야 한다.
- 식별자 클래스는 public 이어야 한다.
- 사용할 때 @IdClass에서의 필드이름과 필드이름을 똑같이 해야 함
@EmbeddedId → 강추! 객체지향스러움
- 이걸 실무에서 조금 더 많이 쓴다고 함
@Embeddable
- Serializable 인터페이스를 구현해야 한다.
- eqauls, hashCode를 구현해야 한다.
- 기본 생성자가 있어야 한다.
- 식별자 클래스는 public 이어야 한다.
- @Embeddable 어노테이션 추가