Use new projection capabilities in Spring Data Hopper.

Uses interfaces instead of DTOs to implement projections. Works
around DATAJPA-864 [0].

[0] https://jira.spring.io/browse/DATAJPA-864
pull/5145/merge
Oliver Gierke 9 years ago committed by Stephane Nicoll
parent b205e02e33
commit e703997be2

@ -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());
}
}

@ -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();
}

@ -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, Long> {
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<HotelSummary> 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<RatingCount> findRatingCounts(Hotel hotel);
}

Loading…
Cancel
Save