inflearn logo
강의

Course

Instructor

Java ORM Standard JPA Programming - Basics

inheritanceType.JOINED에 대한 고찰

598

bum12ark

1 asked

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

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를 설계하시는지 궁금합니다.

inheritanceType java JPA

Answer 1

2

yh

안녕하세요. 믿음직님

실제로 상속을 이용한 방법을 실무에서는 많이 사용하지 않고 꼭 필요한 곳에 부분적으로 사용합니다.

사용한다면 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