Spring Data Rest Pageable Child Collection

  发布于 2023-01-30 11:52

我有一个名为User的@Entity.它有一组变更集如下:

@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="user")
private Set changesets = new HashSet();

我有一个UserRepository:

@Repository
@RestResource(path = "users", rel = "users")
public interface UserRepository extends JpaRepository{ }

还有一个ChangesetRepository:

@Repository
@RestResource(path = "changesets", rel = "changesets")
public interface ChangesetRepository extends JpaRepository { }

调用GET http://localhost:8080/changesets/http://localhost:8080/users/产生分页响应.

如果我打开GET,http://localhost:8080/users/1/changesets那么我将所有结果都放在一个数组中,并且不会发生分页.

有没有办法向Spring Data Rest表明我想通过其父用户访问它时以可分页的方式返回changesets集合?变更集集将快速增长,我宁愿不在单个页面中返回大量结果.

编辑:

正如Willie Wheeler所建议的那样,我将其添加到我的ChangesetRepository中以使其可搜索:

@RestResource(path = "byUser", rel = "byUser")
public Page findByUser(@Param("id") User user, Pageable p);

我将关系保留为双向,但也可以通过使用更改集来隐藏用户更改集的链接@RestResource(exported=false).

旁注:似乎将关系设置为exported = false会隐藏链接,但实际上不会删除映射./ users/1/changesets未公布,但仍然有效.

1 个回答
  • 我不认为SDR直接支持您描述的方法.

    你可能会采取另一种方法.而不是在Person和之间使用双向关系Changeset,使其从单向Changeset到单向Person.然后在你的ChangesetRepository包括这样的方法:

    @RestResource(path = "find-by-person")
    Page<Changeset> findByPerson(@Param("person") Person person, Pageable pageable);
    

    (我只是从记忆中做到这一点,所以你可能需要进行微调.)

    从设计的角度来看,我认为无论如何这都是更强大的,因为我认为一个人的变化集在有限的背景下是相关的.查询变更集可能更合适,而不是将其与人员捆绑在一起.

    2023-01-30 11:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有