我正在使用 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 中进行如上选择时,“avg (rl. rating) as rating”列没有如下图所示的名称。
在此输入图像描述 https://i.stack.imgur.com/8FS0Q.png
评分:4.0
我想做这个服务。
另外,完整的源码位于 github 中。https://github.com/ohgamja3/readinglist-rest-server/ https://github.com/ohgamja3/readinglist-rest-server/
我想得到关于这个问题的帮助。
谢谢阅读。
您可以使用投影 http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts在 repo 方法的输出中。
- 因此,根据您的情况,您可以设置投影,例如:
@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);
注意输出参数的别名 - 它们的名称必须与投影 getter 匹配。
您也可以尝试使用this https://spring.io/blog/2016/05/03/what-s-new-in-spring-data-hopper#projections-on-repository-query-methods丰富数据模型的技术(请参阅如何“使用 SpEL 表达式通过 @Value 注释公开的属性以公开合成属性”)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)