- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个名为 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/
或 http://localhost:8080/users/
上调用 GET 会产生分页响应。
如果我在 http://localhost:8080/users/1/changesets
上调用 GET,那么我会在一个数组中获得所有结果,并且不会发生分页。
有没有办法向 Spring Data Rest 表明我想在通过其父用户访问时以可分页的方式返回变更集集合?变更集集会快速增长,我不想在一个页面中返回大量结果。
编辑:
根据 Willie 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 直接支持您描述的方法。
不过,您还可以采用另一种方法。与其在 Person
和 Changeset
之间使用双向关系,不如让它从 Changeset
到 Person
是单向的。然后在您的 ChangesetRepository
中包含这样的方法:
@RestResource(path = "find-by-person")
Page<Changeset> findByPerson(@Param("person") Person person, Pageable pageable);
(我只是凭内存做的,所以您可能需要稍作调整。)
从设计的角度来看,我认为这无论如何都会更强,因为我认为一个人的变更集在有限数量的上下文中是相关的。查询变更集可能比将它们与人员捆绑更合适。
关于Spring Data Rest 可分页子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469538/
我是一名优秀的程序员,十分优秀!