복붙노트

[SPRING] 스프링 데이터 JPA - 결과 여러 집계 함수와 사용자 정의 쿼리

SPRING

스프링 데이터 JPA - 결과 여러 집계 함수와 사용자 정의 쿼리

나는 한 쿼리에서 평가의 집합의 평균 개수를 반환하려고했다. 내가 검색을 발견 예를 들어 다음과 같은 비교적 쉽게 두 개의 쿼리에서이를 관리. 예를 들면 :

@Query("SELECT AVG(rating) from UserVideoRating where videoId=:videoId")
public double findAverageByVideoId(@Param("videoId") long videoId);

하지만 최대한 빨리 평균과 같은 쿼리 수를 원하는대로, 문제는 시작했다. 많은 시간 실험 후, 나는이 일을 발견, 그래서 나는 여기를 공유하고 있습니다. 나는 그것이 도움이되기를 바랍니다.

1) 나는 결과에 대한 새로운 클래스를 필요 :

의 I는 쿼리에서 그 클래스를 참조했다 :

@Query("SELECT new org.magnum.mobilecloud.video.model.AggregateResults(AVG(rating) as rating, COUNT(rating) as TotalRatings) from UserVideoRating where videoId=:videoId")
public AggregateResults findAvgRatingByVideoId(@Param("videoId") long videoId);

한 쿼리는 이제 평가의 평균 평가와 수를 반환

해결법

  1. ==============================

    1.자신을 해결했다.

    자신을 해결했다.

    사용자 정의 클래스는 결과를받을 수 있습니다 :

    public class AggregateResults {
    
        private final double rating;
        private final int totalRatings;
    
        public AggregateResults(double rating, long totalRatings) {
            this.rating = rating;
            this.totalRatings = (int) totalRatings;
        }
    
        public double getRating() {
            return rating;
        }
    
        public int getTotalRatings() {
            return totalRatings;
        }
    }
    

    @Query("SELECT new org.magnum.mobilecloud.video.model.AggregateResults(
        AVG(rating) as rating, 
        COUNT(rating) as TotalRatings) 
        FROM UserVideoRating
        WHERE videoId=:videoId")
    public AggregateResults findAvgRatingByVideoId(@Param("videoId") long videoId);
    
  2. ==============================

    2.감사.

    감사.

    당신은 NPEs을 방지하고 다음과 같은 구문 분석 튜플 오류를 최대 절전 모드한다 :

    public class AggregateResults {
    
    private final double rating;
    private final int totalRatings;
    
    public AggregateResults(Double rating, Long totalRatings) {
        this.rating = rating == null ? 0 : rating;
        this.totalRatings = totalRatings == null ? 0 : totalRatings.intValue();
    }
    
    public double getRating() {
        return rating;
    }
    public int getTotalRatings() {
        return totalRatings;
    }}
    
  3. from https://stackoverflow.com/questions/32049001/spring-data-jpa-custom-query-with-multiple-aggregate-functions-in-result by cc-by-sa and MIT license