JPA Query Methods: findTopX, где X - это заданное (переменное) число? - PullRequest
0 голосов
/ 01 апреля 2019

Я создаю RESTful API. Мне нужно, чтобы я мог отправить в API номер, указывающий количество новостей, которые он должен вернуть.

Я уже искал некоторые вещи, и в соответствии с документацией можно ограничить ваши результаты, но я не могу найти ничего о том, как сделать его переменным. Поэтому мой вопрос: возможно ли это сделать, или мне нужно написать собственный запрос для этого.

Я уже пробовал такие вещи, как: Iterable<NewsItem> findTopAmountByOrderByDatetimeDesc(Integer amount); где Amount будет заполнено заданным целочисленным «количеством», но, возможно, глупо даже думать, что это возможно, хотя, на мой взгляд, это было бы хорошей функцией.

То, что у меня есть сейчас (не переменная, поэтому не заботится о данном числе):

NewsItemApi:

@RequestMapping(value = "/newsitems/amount",
        produces = { "application/json" }, 
        method = RequestMethod.GET)

NewsItemRepository:

Iterable<NewsItem> findTop2ByOrderByDatetimeDesc();

NewsItemApiController:

public ResponseEntity<Iterable> getLastNewsItems(@NotNull @ApiParam(value = "amount of news items to return", required = true) @Valid @RequestParam(value = "amount", required = true) Integer amount) {
        return ResponseEntity.accepted().body(this.newsItemRepository.findTop2ByOrderByDatetimeDesc());
    }

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Вы должны использовать @Query, что-то вроде:

@Query("select n from NewsItem n order by n.datetime desc limit :num", nativeQuery = true)
Iterable<NewsItem> findTopXByOrderByDatetimeDesc(@Param("num") int num);

Конечно, используйте limit ключевое слово в соответствии с вашей базой данных.

1 голос
/ 01 апреля 2019

Вы можете создать репозиторий и использовать аннотацию @Query для выполнения пользовательских запросов, что-то вроде этого:

public interface NewsRepository extends JpaRepository<News, Long> {

  @Query(value = "SELECT * FROM NEWS ODER BY FIELD_YOU_WANT_TO_ODER_BY DESC LIMIT ?1", nativeQuery = true)
  List<News> getLatestNews(Integer amount);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...