У меня есть @Entity, называемый User. Он имеет набор ревизиями следующим образом:Spring Data Rest Pageable Child Collection
@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="user")
private Set<Changeset> changesets = new HashSet<Changeset>();
У меня есть UserRepository:
@Repository
@RestResource(path = "users", rel = "users")
public interface UserRepository extends JpaRepository<User, Long>{ }
И в ChangesetRepository:
@Repository
@RestResource(path = "changesets", rel = "changesets")
public interface ChangesetRepository extends JpaRepository<Changeset, Long> { }
Вызов GET на http://localhost:8080/changesets/
или http://localhost:8080/users/
дает страничный ответ.
Если я позвоню GET на http://localhost:8080/users/1/changesets
, тогда я получаю все результаты в одном массиве, и пейджинг не возникает.
Есть ли способ указать Spring Data Rest, что я хочу вернуть коллекцию наборов изменений в виде страницы при доступе к ней через своего родительского пользователя? Набор изменений будет быстро расти, и я бы предпочел не возвращать тонны результатов на одной странице.
EDIT:
Как предложил Вилли Wheeler я добавил это к моему ChangesetRepository, чтобы сделать его доступным для поиска:
@RestResource(path = "byUser", rel = "byUser")
public Page<Changeset> findByUser(@Param("id") User user, Pageable p);
Я оставил отношения двунаправленного, но также был в состоянии скрыть ссылку на ревизии от пользователь с помощью @RestResource(exported=false)
в наборе изменений.
Боковое примечание: Кажется, что установка отношения к exported = false скрывает ссылку, но фактически не удаляет сопоставление./users/1/changesets не объявляется, но он по-прежнему действителен.
Это хорошее предложение. Я действительно реализовал его, и это довольно хорошо. Я отредактирую свой пост с подробностями! –
Я приму свой ответ. Просто хотелось посмотреть, не попал ли кто-нибудь еще с определенной настройкой SDR, которая позволяла мне то, что я хотел. –
Должен использовать 'Page' как возвращаемый тип вместо 'List ' –