如何在Spring Data Rest中添加特定字段?

时间:2017-03-21 12:53:34

标签: spring-data-jpa spring-data-rest

我正在使用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;列没有如下图所示的名称。

enter image description here

评级:4.0
我想做这项服务。

此外,完整的源代码是github。 https://github.com/ohgamja3/readinglist-rest-server/

我想帮助解决这个问题。 谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

您可以在repo方法的输出中使用projection

  1. 因此,在您的情况下,您可以设置投影,例如:
  2. @Projection(name = "BookWithRating", types = { Book.class }) 
    interface BookWithRating { 
    
      Float getRating(); 
    
      Book getBook(); 
    }
    
    1. 然后设置查询方法:
    2. @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;)。