[jpa] 부모 테이블을 공유하는 자식 테이블(feat.@PrimaryKeyJoinColumn)

원하는 형태

여러 자식 테이블들의 1개 로우가 부모 테이블 로우 1개를 바라보는 형태

1
2
3
4
Item : row 1개, pk=1  
Album : row 1개, pk1
Movie : row 1개, pk1
...

결과적으로, 상속으론 저렇게 할수없다.
상속을 사용하면 완벽한 식별관계를 형성해서 자식(상속에서) 로우에 맞춰 부모 로우도 같이 생성하기 때문이다.

하긴 객체지향에서도 자식 생성시 부모 인스턴스 생성하니까 당연한 소리인가…

구현

@OneToOne Eager를 사용하면 위의 형태를 구성할 수 있다.
기본적인 @OneToOne 을 사용하면 위의 관계를 외래키를 이용해서 유지하게 되는데,
만약 정말 위처럼 완벽한 식별관계의 형태로 유지하고 싶다면 @PrimaryKeyJoinColumn을 사용하면 된다.

1
2


결과적으로 JPA 엔티티 상속의 기능은 딱히 특별할것이 없다… 는 결론입니다.

자식 테이블의 여러 로우들이 부모 테이블 로우 1개를 바라보는 방식

이건 잘못 생각한 것이다.
여러 로우에서 1개의 로우를 바라보려면 외래키로 연결되어야 한다
@ManyToOne Eager 를 사용해야 할 듯

여러 자식 테이블들의 여러 로우들이 부모 테이블 로우 1개를 바라보는 방식

이 또한 잘못 생각한 것
@ManyToOne Eager 를 사용해야 할 것이고, @DiscriminatorValue가 추가적으로 필요할 것이다