해결된 질문
작성
·
194
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이 아니어서 네이티브 쿼리를 사용하시길 바랍니다.
감사합니다.
1.조인하고 정렬한 다음 select에서 조회 대상을 가게 엔티티만 선택해주세요. 추가로 distinct도 적용해주세요. 이 방법이 안되면 JPQL + DTO 조회를 사용하셔야 합니다.
-> 위 방법으로 해결 하였습니다.
2. 애플리케이션에서 제외하거나, 또는 JPQL로 적절한 쿼리를 만들고 조회해서 DTO로 반환받아야 합니다.
-> 3번 네이티브쿼리로 사용하여 jpql을 사용 못하였습니다 해서 dto 매핑할때 애플리케이션에서 제외 하였습니다 .
구글링 검색하였을때 jdbc템플릿으로 객체 안에 객체 리스트를 담지 못하여 추후에 myBatis로 매핑하여 필요한 데이터만 뽑아야 할거 같네요.
일단 데이터 다 긁어 오는게 리소스적으로 문제인거 같지만 데이터가 많지않아 문제가 되지 않을거라 판단 됩니다.
3. 위경도: 표준 SQL이 아니어서 네이티브 쿼리를 사용하시길 바랍니다.
-> 다른방법이 있나 고민하였는데 감사합니다.