У меня есть @Entity под названием User. Он имеет набор наборов изменений следующим образом:
@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="user")
private Set<Changeset> changesets = new HashSet<Changeset>();
У меня есть пользовательский репозиторий:
@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, что я хочу вернуть коллекцию наборов изменений в виде страницы при доступе к ней через родительского пользователя? Набор наборов изменений будет быстро расти, и я бы не хотел возвращать тонны результатов на одной странице.
РЕДАКТИРОВАТЬ:
По предложению Вилли Уиллера я добавил это в свой ChangesetRepository, чтобы сделать его доступным для поиска:
@RestResource(path = "byUser", rel = "byUser")
public Page<Changeset> findByUser(@Param("id") User user, Pageable p);
Я оставил связь двунаправленной, но также смог скрыть ссылку на наборы изменений от пользователя, используя @RestResource(exported=false)
в наборе наборов изменений.
Боковое примечание: кажется, что установка отношения exported=false скрывает ссылку, но фактически не удаляет сопоставление. /users/1/changesets не рекламируется, но все еще действует.