我正在使用Spring Data Rest开发一个Web服务。
public interface BookRepository extends PagingAndSortingRepository<Book, Long> {
@Override
@Query("select avg(rl.rating) as rating, b from ReadingList rl join rl.book b group by rl.book order by rating desc")
Page<Book> findAll(Pageable pageable);
}
当我选择上面的JPQL时,&#39; avg(rl.rating)作为评级&#39;列没有如下图所示的名称。
评级:4.0
我想做这项服务。
此外,完整的源代码是github。 https://github.com/ohgamja3/readinglist-rest-server/
我想帮助解决这个问题。 谢谢你的阅读。
答案 0 :(得分:1)
您可以在repo方法的输出中使用projection。
@Projection(name = "BookWithRating", types = { Book.class })
interface BookWithRating {
Float getRating();
Book getBook();
}
@Query("select avg(rl.rating) as rating, b as book from ReadingList rl join rl.book b group by rl.book order by rating desc")
Page<BookWithRating> findAllWithRating(Pageable pageable);
注意输出参数的别名 - 它们的名称必须与投影获取者匹配。
此外,您可以尝试使用this技术来丰富数据模型(请参阅如何使用SpEL表达式使用@Value注释公开的属性以公开合成属性&#39;)。