inheritanceType.JOINED에 대한 고찰
598
1 asked
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract class Catalog extends BaseEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer price;
private Integer stockQuantity;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id")
private Category category;
}
@Entity
@DiscriminatorValue(value = "SUPPLEMENT")
public class Supplement extends Catalog {
private Integer capacity; // 용량
}
@Entity
@DiscriminatorValue(value = "SPORT_WEAR")
public class SportWear extends Catalog {
private SportWearSizeEnum size; // 사이즈
}
위와 같이 설계 되었을 때 컨트롤러와 서비스를 구축하는데 어떻게 접근해야 할지 고민입니다.
제가 생각해본 해결법은 총 2가지 였습니다.
1. 각 서브 엔티티마다 컨트롤러 서비스 리파지토리를 새로 만든다.
- 이 방법은 테이블이 생길때 마다 컨트롤러가 추가되며 도메인에 의존적인 것이 아닌 데이터베이스에 의존적인 설계라 생각이 들어 가장 쉬운 설계 였지만 마음에 들지 않았습니다.
2. 자바 제네릭 사용
- 자바의 제네릭을 사용하여 CatalogService를 주입받을 때 CatalogService<SportWear> 의 형식으로 사용해보기로 하였습니다.
하지만 이 방식 또한 카탈로그에 해당하는 테이블이 추가될 때마다 컨트롤러에 CatalogService<Others>의 형식으로 코드가 추가된다는 점이 마음에 들지 않았습니다.
그래서 제가 생각한 마지막 방법은 인터페이스를 사용하는 방식입니다. 이 방식은 부족한 제 지식으로 인해 아직 명확한 설계법은 고안해내지 못한 상태입니다.
또한, 테이블 마다 받게 되는 Request, Response, DTO가 각각 다른 상황에서 어떻게 하면 유연한 설계 방식으로 가져가야할지 많은 고민이 있습니다.
inheritanceType.JOINED 을 사용하실 때 어떤 방식으로 Controller, Service, Repository를 설계하시는지 궁금합니다.
Answer 1
2
안녕하세요. 믿음직님
실제로 상속을 이용한 방법을 실무에서는 많이 사용하지 않고 꼭 필요한 곳에 부분적으로 사용합니다.
사용한다면 2가지 방법으로 처리가 필요합니다.
1. instance of를 통해서 다운 케스팅 처리
2. 리포지토리를 각각 따로 만들기
감사합니다.
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
50
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
48
1
JPQL 메소드와 락
0
51
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
88
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
87
2
연관관계 매핑 질문드립니다.
0
81
2
h2데이터베이스 실행오류
0
105
2
persistence.xml
0
103
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
89
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
82
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
90
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
135
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1
임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.
0
95
1
데이터베이스가 초기화되는 것 같아요
1
176
2

