고급매핑 - 실전예제4 상속관계 매핑 관련 문의 드립니다.
안녕하세요~ 영한님! 강의 잘 보고 있습니다~
예제에서는 SINGLE_TABLE 상속 정책을 가져가서 Item 테이블에 BaseEntity의 필드들이 추가된 걸 확인했었는데요.
JOINED 상속 정책을 가져가는 경우, Item에는 BaseEntity가 추가되지만, Item을 상속받는 Album, Book, Movie 매핑 테이블에는 BaseEntity가 추가되지 않습니다.
키는 Item에 있고 조인해서 확인이 가능하니 필수 필드는 아니겠지만, 현업(DBA)에서 Album, Book, Movie에도 BaseEntity에 포함된 필드들이 필요하다고하는 경우도 예상해 볼 수 있을 것 같습니다.
현재 예제에서는 다중 상속이 안 되어 불가할텐데, 혹시 유사한 케이스가 있었다면 팁 좀 부탁 드립니다~^^
감사합니다~
답변 1
6
반갑습니다. 영훈님^^
먼저 원칙적인 부분을 말씀드릴께요 :)
BaseEntity의 내용은 객체 관계에서 공통 데이터 상속을 목표로 하고 있습니다.
그래서 공통 데이터를 보관하는 ITEM 테이블에만 공통의 내용이 있는 것이 맞습니다.
추가로 JOINED 전략 자체가 공통은 ITEM에 두고 공통이 아닌 부분만 분리해서 별도의 테이블로 만드는 것입니다.
JOINED 전략은 이미 ITEM 테이블과 자식 테이블이 1:1 구조라는 것을 가정하기 때문에 BaseEntity의 내용은 ITEM 테이블에만 있는 것이 맞습니다. 공통인 부분은 필요하면 JOIN을 사용해서 ITEM에서 찾으면 되는 것이지요.
그런데 질문하신 것 처럼 DBA와 이슈가 있으면 어떻게 해야 할까요?
예를 들어서 변경시간이라는 공통 데이터가 있다면, ITEM 테이블에만 이 데이터를 두고, DBA와 협의할 때 ITEM의 자식 테이블(ALBUM, BOOK, MOVIE)이 변경되어도 ITEM 테이블에 있는 변경시간으로 일관성있게 관리하고, 그것에 대해서 애플리케이션 개발팀에서 책임을 지겠다라고 협의를 하시면 될 것 같습니다.
만약 그게 안되면... (때로는 양보도 필요하니까요.)
그냥 값 객체(EmbeddedType, Value Object)를 만들어서 공통 부분을 각각의 Album, Book, Movie 객체에 포함하는 것 정도가 대안일 것 같습니다.
감사합니다^^!
inheritance startegy 선택시 고려사항
0
6
0
Entity 동등성 비교
0
14
1
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
51
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
48
1
JPQL 메소드와 락
0
52
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
89
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
89
2
연관관계 매핑 질문드립니다.
0
82
2
h2데이터베이스 실행오류
0
105
2
persistence.xml
0
103
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
90
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
83
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
91
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
136
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1





