inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

@Query, 값, DTO 조회하기

상속받는 엔티티 질문(outer join)

119

jae uk choi

작성한 질문수 0

0

삭제된 글입니다

JPA java spring spring-boot

답변 4

1

김영한

안녕하세요. jae uk choi님

우선 첫번째 질문에 대한 답은 상속관계로 처리하셨으면 이 경우 엔티티로 조회한 다음에 DTO로 변환하는 식으로 처리해야 합니다. 

        List<Product> result = em.createQuery("select p from Product p", Product.class)
                .getResultList();

        for (Product product : result) {
            if (product instanceof Kit) {
                Kit k = (Kit)product;
                System.out.println(k.getStock());
            }
            if (product instanceof Computer) {

            }
        }

순수 자바에서 상속을 처리할 때와 유사하게 처리하시면 됩니다.  물론 여기서 더 나가서 다운케스팅 코드를 깔끔하게 만들려면 비지터 패턴 같은 것을 사용할 수 있는데, 이 부분은 프로젝트 규모가 트지 않으면 득보다 실이 클수 있어서 권장하지는 않습니다. 혹시 내용이 궁금하시면 JPA 책 669p를 참고하시면 됩니다.

두번째 질문은 오류 메시지에 답이 있습니다^^ 실제 돌려보시면 오류가 발생하는데, dtype이라는 이름을 이미 사용하기 때문이지요. 데이터를 업데이트 하는 것은 하이버네이트가 처리해주고, 개발자는 대신에 읽기만 할 수 있습니다. 다음과 같이 읽기 전용으로 설정해주시면 조회가능합니다.

@Column(insertable = false, updatable = false)
private String dtype;

감사합니다^^

0

jae uk choi

혹시 아니면 

@DiscriminatorColumn(name = "dtype")
public abstract class Product {

에서 칼럼 구분으로 dtype

가 생성되는데

얘를 조회할 수 있는 방법은 없나요..?

싱글 테이블로 사용하는 방법은 알겠는데,

private Stirng dtype 으로 선언하면 에러가 나고,

선언하지 않으면 사용할 수 없는데.. 어떤 방식으로 사용하는지 궁금합니다.

ex.

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
public abstract class Product {

@Id
@GeneratedValue
@Column(name = "product_id")
private long id;

//private String dtype;
// 이렇게 쓰면 에러. 그러면 select 후 dtype의 값을 조회하고 싶을땐?
// getDtype()..? 사용 어떤 식으로 할 수 있나요?

0

jae uk choi

https://github.com/jaeuk2274/jpa_practice/tree/master/src/main/java/me/jaeuk/homework

에 프로젝트 올려두었습니다.

ProductRepository 클래스에 findAllProductStock 메서드입니다.

product 의 종류중에는 여러 가지가 있는데, 무형의 product는 재고를 관리하지 않습니다.

그래서 임의의 큰 숫자를 고정해서 보여줄 예정이고, 재고 관리하는 유형 자산은 재고를 보여줘야 합니다.

상품타입 재고

a상품(무형) 99999

b상품(유형) 50

좋은 강의 항상 감사드립니다 :)

0

김영한

안녕하세요. jae uk choi님

도움을 드리고 싶은데, 질문 내용만으로는 머리속에 명확하게 도메인 모델이 그려지지 않아서 정확한 답을 드릴 수가 없습니다.

궁금하신 내용을 정리해서 동작하는 예제 코드와 테스트 케이스를 만들어서, github에 올리고 링크를 주세요^^

감사합니다.

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

67

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

105

3

MemberRepository 구현체

0

56

1

pdf 표현 질문드립니다.

0

60

1

로그가 남지 않는 문제.

0

79

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

70

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

71

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

91

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

45

1

하이버네이트6에서의 최적화에 이은 질문

0

82

1

save() vs saveAndFlush DB 통신 횟수

0

52

1

순수 JPA 리포지토리 코드 수정부분

0

86

2

bulk연산 후 flush하는 이유를 모르겠어요

0

150

3

bulk insert 질문입니다.

0

176

2

교만했던 것 같아요.

0

146

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

146

2

동적 테이블에 대한 질문

0

85

1

영속성 전이와 연관관계

0

130

2

강의 10:25 질문

0

73

1

단건 update 질문

0

95

2

엔티티 와 도메인의 경계

0

126

1

UsernameOnlyDto 타입 type mismatch 오류

0

119

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

136

1