강의

멘토링

커뮤니티

Inflearn Community Q&A

gntmddl42611080's profile image
gntmddl42611080

asked

Real-world! Spring Boot and JPA Utilization 1 - Web Application Development

OrderItem과 검색에 관한 질문

Written on

·

227

0

 

안녕하세요? JPA 공부중 질문 드립니다.

OrderItem에관해 생각중인데 해결이 안되는 문제가 있어서 질문을 드립니다. 

직접적인 강의내용에는 약간 벗어날수도 있지만 도와주시면 정말 감사하겠습니다.

상황을 한번 가정해 보면

Order(주문)이 한개 존재하고

거기에 딸린 Item이 아주 많다는 상황을 가정해볼게요

그리고 저는 특정 Order 특정 Item 존재하는지 확인하고 싶습니다.

 

1. 가장 먼저 생각나는 단순한 방법은 Order Entity가 다음처럼 orderItems로 갖고있으니

 

@OneToMany(mappedBy = "order", cascade = ALL)

private List<OrderItem> orderItems = new ArrayList<>();

 

for문을 돌면서 하나하나 돌면서 원하는 Item의 ID가 존재하는지 확인해볼수 있을 것 같습니다.

이건 아마 O(n)인것같은데 orderItem이 아주 많다면 별로 좋은방법은 아닌것같습니다.

 

 

2. 다음 생각은 Set을 이용하는 방법일것같은데, 그렇다면 Item을  다음처럼 Id만 존재하는 Set을 만들어야 하는게 맞나요?

Set<Long> orderItems ;

근데 Entity에서는 Set<OrderItem> 이런식으로 아마 갖고있어야 할것 같은데 아이디만 갖는 Set<Long>을 만들어야되는데 O(1)이 가능한지 잘 모르겠습니다.
그리고 Set<Long>이 만들어 지더라도 많은 양을 메모리에 다 담아둔다는게 좋은방법인지 모르겠습니다.

(+ equals 구현으로 Set<Long>을 굳이 만들필요는 없을수도 있을것같네요 그래도 메모리에는 담아야될것같긴합니다..)

 

3. 다음 생각은 Item이 있는지 JPQL이나 QueryDSL이던 쿼리를 하나 새로 생성해서 mapping이 존재하는지 카운트하는 방법이 있을것같은데
이렇게하면 디비를 한번더 갔다와야되고, Order의 리스트 조회시에는 매 건마다 쿼리를 한번씩 하는 문제가 생길것같습니다. 

한번이 문제가 그다지 안될수도 있지만 아이템처럼 매핑된 다른 엔티티가 여러개 존재한다면 리스트 조회시 건마다 쿼리하는게 늘어날것 같습니다.

 

 

이런경우에는 어떻게 해결할 수 있을까요?

 

감사합니다.

 

 

 

 

 

javaspring-boot웹앱springJPA

Answer 1

0

yh님의 프로필 이미지
yh
Instructor

안녕하세요. H L님^^

SQL을 이용해서 해결하면 됩니다.

Order와 Item을 조인하고, 그 다음에 where문에서 Item에 원하는 상품 조건을 선택하시면 됩니다.

SQL 기본을 학습하시길 권장드립니다.

그러면 이것을 활용해서 JPQL로도 문제를 해결할 수 있습니다.

감사합니다.

gntmddl42611080's profile image
gntmddl42611080

asked

Ask a question