안녕하세요 Entity 상속관련해서 질문드립니다!
안녕하세요 강사님 강의 정말 잘보고 있는 수강생입니다! 제가 이번에 사이드 프로젝트를 진행하는데, 정말 오랫동안 고민해보고 조사해봐도 답이 안나와서 질문드립니다. 답변해주시면 정말 감사하겠습니다!
이 프로젝트에서는 유저 중 일부만 아티스트 상태를 갖습니다. 그래서
일단 상태 중 일부를 잘라보면, 위와 같이 database를 설계했습니다.
Artist가 User의 상태 전부를 갖고 있으므로 Artist가 User를 상속받게 Entity 설계를 했습니다.
그런데 이와 같이 설계를 하면 Artist는 독립적인 Id가 없습니다. 그래서 artist_id에 직접적으로 접근할 수가 없어서 두가지 문제가 발생합니다.
첫번째로 아티스트를 생성하려면 직접적으로 접근해서 생성하지 못하고, 유저 정보가 생성될 때만 생성할 수 있습니다. 그래서 artist를 생성할 때 현재 다음과 같이 생성되게 로직을 짰습니다.
만약 7번 유저가 이미 등록돼있고, 7번 유저에 대해서 artist 등록을 한다고 가정해보겠습니다. 그러면 아래와 같은 로직을 따라갑니다.
7번 유저를 가져옴 -> builder를 통해서 artist를 생성. 그러면 8번 유저가 생성되고 8번 유저가 artist와 연결됨 -> 7번 유저는 삭제
그런데 위와 같이 로직을 따르는게 최적화에 있어서 좋지 못하다는 생각이 듭니다. 또한 7번 유저 인덱스가 비어서 빈 인덱스가 생겼기 때문에 데이터를 볼때도 좋지 않을 것 같다는 생각이 듭니다.
두번째로 artist_id가 없기 때문에 artist와 다른 테이블을 mapping 시킬 때 까다로운 부분이 있습니다. 그래서 artist_id를 따로 만들어야 하나 생각이 들다가도 로직상으로 맞지 않는 것 같기도 합니다...
조언 주시면 정말로 감사하겠습니다...!!
답변 2
2
휴일인데도 답변 정말 빨리 해주시네요... (감동) 상속으로만 생각을 하고 있었어서 위임쪽으로는 생각을 못해보고 있었습니다. 해결할 실마리를 얻은 것 같습니다. 감사합니다 정말 많은 도움이 됐어요!
2
안녕하세요. loosie 358님 좋은 질문입니다.
먼저 정말 오랫동안 고민해보고 조사해봐도 답이 안나와서 -> 이 부분이 중요합니다.
보통 이런 경우는 이미 잘못된 설계를 가지고 고민하고 있을 가능성이 높습니다.
질문하신 내용을 기반으로 비즈니스 요구사항을 정리해보면 다음과 같습니다.
1. 유저를 먼저 등록하고 아티스트는 나중에 따로 등록될 수 있다.
2. 아티스트와 직접 연결하는 다른 엔티티(테이블)들이 있다.
비즈니스 요구사항이 유저를 먼저 등록하고, 해당 유저를 아티스트로 바꾸는게 나중에 일어난다면 유저와 아티스트를 명확하게 분리해야 합니다. 상속보다 위임을 사용하면 간단하게 문제가 해결됩니다.
두번째도 artist_id가 필요하고, 다른 테이블을 mapping 시키는 것도 user가 기준이 아니라 아티스트가 기준입니다.
따라서 이 경우는 둘을 명확하게 분리하면 문제가 쉽게 해결됩니다.
그리고 실무에서 엔티티 연관관계에 상속을 사용하는 일은 매우 드물게 발생합니다.
도움이 되셨길 바래요^^
실무 조언 관련 질문입니다.
0
40
1
H2데이터베이스 파일 생성
0
48
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
46
1
JPQL 메소드와 락
0
49
1
Delivery @OneToOne
0
55
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
85
2
UnsupportedOperationException 발생
0
80
3
H2 Database 연결이 안됩니다.
0
87
2
연관관계 매핑 질문드립니다.
0
79
2
h2데이터베이스 실행오류
0
103
2
persistence.xml
0
101
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
76
1
영속성 컨텍스트
0
61
1
JPA 프록시
0
87
1
Native Query와 MyBatis
0
62
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
81
1
임베디드 타입 예시 코드 관련 질문
0
110
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
89
3
인텔리제이 패키지 커서 단축키 질문
0
104
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
134
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
67
1
임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.
0
95
1
데이터베이스가 초기화되는 것 같아요
1
173
2





