• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

자식 컬렉션 Order by 질문 사항있습니다

22.10.26 17:36 작성 조회수 115

0

안녕하세요 JPA 수강하면서 현업에

적용하고있는데 질문사항 있어 글을 남깁니다.

store -< events 1:N 관계에 있어

가게들중 이벤트를 최근에 생성한 가게들 우선순위로 가게 리스트를

보여주고 싶지만 이벤트랑 조인할 경우 이벤트들이 여러개가 나와

가게에 @OneToMany events 최근 생성된 데이터가 있을경우 가게를 위로 올리고싶은데

방법이 있을까요 ?

그리고 Store-< Events 에서 이벤트가 끝난 데이터들은 List 제외 시키고 싶은데

mapping 할때 조건을 넣어서 따로 걸러야 하는 부분인가요 ?

조건을 걸기위해 조인 하는순간 row수가 배가 되어

원하는 list값만 가지고 오기가 어렵네요 


위 내용과 상관없이 궁금사항 하나 더 남깁니다.

위경도 좌표 거리 기반으로 가게를 보여주고 싶으나

jpa에선 쉽지않아 nativeQuery(mysql 8.0) 로 작성 하여 interface로 매핑후 다시 dto로 가공 해서

반환값을 주는데 다른 방법이 있는지 궁금 합니다.

 

추가 질문사항입니다.

nativeQuery로 위경도 가까운 거리 계산 하여

리스트 생성하여 가게 인덱스에 담고 jpa findAllByIdx in :list 로

가게 관련 정보를 추출하였으나 자동 정렬되어 가까운 거리 순으로 리스트가 안만들어지는데

이럴때는 jdbc로 구현해야 하나요 ?? 페이징 처리까지 하려니 가급적이면 jpa를 쓰려고하는데

자동정렬 해제-> in 절 순서대로 넣은값으로 출력이 안되나요 ?

조언 부탁드립니다.

 

감사합니다.

답변 1

답변을 작성해보세요.

1

안녕하세요. 김준엽님

1. 가게에 @OneToMany events 최근 생성된 데이터가 있을경우 가게를 위로 올리고싶은데 방법이 있을까요 ?

-> 조인하고 정렬한 다음 select에서 조회 대상을 가게 엔티티만 선택해주세요. 추가로 distinct도 적용해주세요. 이 방법이 안되면 JPQL + DTO 조회를 사용하셔야 합니다.

2. 그리고 Store-< Events 에서 이벤트가 끝난 데이터들은 List 제외 시키고 싶은데 mapping 할때 조건을 넣어서 따로 걸러야 하는 부분인가요?

-> 애플리케이션에서 제외하거나, 또는 JPQL로 적절한 쿼리를 만들고 조회해서 DTO로 반환받아야 합니다.

3. 위경도: 표준 SQL이 아니어서 네이티브 쿼리를 사용하시길 바랍니다.

감사합니다.

김준엽님의 프로필

김준엽

질문자

2022.10.31

1.조인하고 정렬한 다음 select에서 조회 대상을 가게 엔티티만 선택해주세요. 추가로 distinct도 적용해주세요. 이 방법이 안되면 JPQL + DTO 조회를 사용하셔야 합니다.

-> 위 방법으로 해결 하였습니다.

2. 애플리케이션에서 제외하거나, 또는 JPQL로 적절한 쿼리를 만들고 조회해서 DTO로 반환받아야 합니다.

-> 3번 네이티브쿼리로 사용하여 jpql을 사용 못하였습니다 해서 dto 매핑할때 애플리케이션에서 제외 하였습니다 .

구글링 검색하였을때 jdbc템플릿으로 객체 안에 객체 리스트를 담지 못하여 추후에 myBatis로 매핑하여 필요한 데이터만 뽑아야 할거 같네요.

일단 데이터 다 긁어 오는게 리소스적으로 문제인거 같지만 데이터가 많지않아 문제가 되지 않을거라 판단 됩니다.

3. 위경도: 표준 SQL이 아니어서 네이티브 쿼리를 사용하시길 바랍니다.

-> 다른방법이 있나 고민하였는데 감사합니다.