User という @Entity があります。次のような変更セットのセットがあります。
@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> { }
http://localhost:8080/changesets/
またはで GET を呼び出すhttp://localhost:8080/users/
と、ページングされた応答が生成されます。
GET を呼び出すとhttp://localhost:8080/users/1/changesets
、すべての結果が 1 つの配列で取得され、ページングは発生しません。
親ユーザーを介してアクセスするときに、変更セットコレクションをページング可能な方法で返したいことを Spring Data Rest に示す方法はありますか? 変更セットのセットは急速に拡大するため、1 ページに大量の結果を返すのは避けたいと考えています。
編集:
Willie Wheeler が提案したように、これを ChangesetRepository に追加して検索可能にしました。
@RestResource(path = "byUser", rel = "byUser")
public Page<Changeset> findByUser(@Param("id") User user, Pageable p);
私は関係を双方向のままにしましたが、変更セットのセットで使用することにより、変更セットへのリンクをユーザーから隠すこともできました@RestResource(exported=false)
。
補足: 関係を export=false に設定すると、リンクが非表示になりますが、実際にはマッピングが削除されないようです。/users/1/changesets は宣伝されていませんが、有効です。