diff --git a/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/HotelSummary.java b/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/HotelSummary.java index bf03d13efc..748eb76436 100644 --- a/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/HotelSummary.java +++ b/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/HotelSummary.java @@ -16,48 +16,15 @@ package sample.data.jpa.domain; -import java.io.Serializable; -import java.math.BigDecimal; -import java.math.MathContext; -import java.math.RoundingMode; +public interface HotelSummary { -public class HotelSummary implements Serializable { + City getCity(); - private static final long serialVersionUID = 1L; + String getName(); - private static final MathContext MATH_CONTEXT = new MathContext(2, - RoundingMode.HALF_UP); + Double getAverageRating(); - private final City city; - - private final String name; - - private final Double averageRating; - - private final Integer averageRatingRounded; - - public HotelSummary(City city, String name, Double averageRating) { - this.city = city; - this.name = name; - this.averageRating = averageRating == null ? null - : new BigDecimal(averageRating, MATH_CONTEXT).doubleValue(); - this.averageRatingRounded = averageRating == null ? null - : (int) Math.round(averageRating); - } - - public City getCity() { - return this.city; - } - - public String getName() { - return this.name; - } - - public Double getAverageRating() { - return this.averageRating; - } - - public Integer getAverageRatingRounded() { - return this.averageRatingRounded; + default Integer getAverageRatingRounded() { + return getAverageRating() == null ? null : (int) Math.round(getAverageRating()); } } diff --git a/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/RatingCount.java b/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/RatingCount.java index e81c7ae1fb..a994def987 100644 --- a/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/RatingCount.java +++ b/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/domain/RatingCount.java @@ -16,26 +16,9 @@ package sample.data.jpa.domain; -import java.io.Serializable; +public interface RatingCount { -public class RatingCount implements Serializable { + Rating getRating(); - private static final long serialVersionUID = 1L; - - private final Rating rating; - - private final long count; - - public RatingCount(Rating rating, long count) { - this.rating = rating; - this.count = count; - } - - public Rating getRating() { - return this.rating; - } - - public long getCount() { - return this.count; - } + long getCount(); } diff --git a/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/service/HotelRepository.java b/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/service/HotelRepository.java index 87a51313fd..1635573107 100644 --- a/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/service/HotelRepository.java +++ b/spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/sample/data/jpa/service/HotelRepository.java @@ -16,13 +16,13 @@ package sample.data.jpa.service; -import java.util.List; - import sample.data.jpa.domain.City; import sample.data.jpa.domain.Hotel; import sample.data.jpa.domain.HotelSummary; import sample.data.jpa.domain.RatingCount; +import java.util.List; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; @@ -32,11 +32,11 @@ interface HotelRepository extends Repository { Hotel findByCityAndName(City city, String name); - @Query("select new sample.data.jpa.domain.HotelSummary(h.city, h.name, avg(r.rating)) " + @Query("select h.city as city, h.name as name, avg(r.rating) as averageRating " + "from Hotel h left outer join h.reviews r where h.city = ?1 group by h") Page findByCity(City city, Pageable pageable); - @Query("select new sample.data.jpa.domain.RatingCount(r.rating, count(r)) " + @Query("select r.rating as rating, count(r) as count " + "from Review r where r.hotel = ?1 group by r.rating order by r.rating DESC") List findRatingCounts(Hotel hotel); }