当前位置: 首页 > 知识库问答 >
问题:

对SpringDataREST2.1中的子资源进行分页

戎鹏云
2023-03-14

我使用带有默认配置的SpringDataREST2.1.1版本。考虑到下列资源:

GET /communities/MyCommunity

{
    "creationDate": "2014-07-16T06:22:37.153+0000",
    "name": "GroupeSEB",
    "_links": {
        "self": {
            "href": "http://localhost:8080/api/communities/GroupeSEB"
        },
        "posts": {
            "href": "http://localhost:8080/api/communities/GroupeSEB/posts"
        }
    }
}

当我得到"帖子"子资源:

GET /communities/MyCommunity/posts

{
    "_embedded": {
        "posts": [
            {
                "creationDate": "2014-07-09T13:09:14.535+0000",
                "id": "53bd3efae4b012818368c549",
                "_links": {
                    "self": {
                        "href": "http://localhost:8080/api/posts/53bd3efae4b012818368c549"
                    } 
                }
            }
        ]
    }
}

未启用分页。由于我的父资源可以聚合大量帖子(其子资源),我如何为每个子资源启用分页?

共有2个答案

娄振
2023-03-14

奥利弗给出的答案并不完全正确。

在嵌套实体(集合)上,没有存储库使用。但在惰性嵌套实体(集合)上存在存储库使用情况@默认情况下,One2Many是懒惰的。因此,在检索父实体时,不会填充嵌套实体,也不会从repo检索嵌套实体。只有在会话中访问嵌套实体时,才会填充该实体。在Spring数据中,父实体的REST列表从不访问嵌套实体。当通过嵌套实体访问URL访问嵌套的惰性实体时,即/communities/GroupeSEB/posts是访问的嵌套对象,因为该嵌套对象不是对象实例,而是将导致从repo检索的对象的懒散代理。好的,嵌套对象可以从Repo的Repo层缓存insead中检索,但是我认为可以禁止嵌套实体/对象上的缓存。

因此,如果有一种方法可以在LazyProxy实现上传递/检索分页信息,那么这可能会起作用。

P. S.我从经验中知道他们,因为我在@One2One和@Many2One之间进行了双向导航,并在列出父母时阻止N 1,我设置了@ManyToOne(读取=FetchType。LAZY),然后使用@NamedEntityGgraph覆盖回购接口中的相关findbyId(),当使用@NamedEntityGgraph检索时,将嵌套强制为EAGER。这并不直接适用于这个问题,但确实证明了在Spring数据中,nesetd实体的检索是可控的。

狄誉
2023-03-14

答案很简单:你不能。理由是:

关联资源表示主实体与一个或多个其他实体之间的关联。因此,要呈现这些资源,我们需要查找主实体并只访问属性。这意味着,不会使用存储库,也不会应用位置分页,因为整个机制与存储无关。我们在实体实例上操作,如何加载关联的机制是高度特定于存储的。

因此,如果您的域模型中已经有对象关联,则您完全受存储处理关联的方式的约束。因此,即使您应用了分页,您也必须首先读取所有相关对象才能获得它们的id。

作为一种解决方法,您可以仅使用ids,并手动公开该路径上的资源,该路径将使用ids和关联实体存储库上的专用查询方法。

 类似资料:
  • 主要内容:系统资源使用调用进程需要一定的资源,如CPU和内存来执行任务。 现在我们将查看相关的命令和系统调用来了解资源利用和监视的信息。 此外,资源上的每个过程在默认情况下都有一定的限制,如果需要,可以增加限制以适应应用需求。 以下是使用命令的基本系统或过程资源信息 - top命令 命令不断显示系统资源的使用情况。 如果任何进程使系统处于某种挂起状态(消耗更多的CPU或内存),则可能会记录进程信息并采取相应的措施(例如,杀

  • 进程文件 在Linux中“一切皆文件”,进程的一切运行信息(占用CPU、内存等)都可以在文件系统找到,例如看一下PID为1的进程信息。 root@87096bf68cb2:/go/src# ls /proc/1/ attr cmdline cwd fdinfo loginuid mounts numa_maps pagemap

  • 本文向大家介绍如何对网站的文件和资源进行优化相关面试题,主要包含被问及如何对网站的文件和资源进行优化时的应答技巧和注意事项,需要的朋友参考一下 1.文件合并(目的是减少http请求) 2.文件压缩 (目的是直接减少文件下载的体积) 3.使用cdn托管资源 4.使用缓存 5.gizp压缩需要的js和css文件 6.meta标签优化(title,description,keywords),headin

  • 导入粒子资源 将 Cocos2d 支持的粒子 .plist 文件直接放到工程资源目录下。 在场景中添加粒子系统 方法一,从 资源管理器 里将粒子资源直接拖到 层级管理器: 方法二,从 资源管理器 里将粒子资源直接拖到 场景编辑器: 方法三,在已有节点上添加一个 粒子系统(ParticleSystem) 组件,从 资源管理器 里将粒子资源直接赋给组件的 File 属性: 注意:不支持 .plist

  • 我正在尝试为kubernetes吊舱中运行的服务分配CPU资源。服务大多是基于nodejs的RESTendpoint,带有一些DB操作。 在负载测试期间,尝试在100米和1000米之间对吊舱进行不同的组合。对于每秒的预期请求数,当值小于 我不知道应该根据什么来选择特定的CPU资源值。有人能在这方面帮助我吗?

  • 22.7.3.一些 source set 的例子 加入含有类文件的 sorce set 的 JAR: 例22.8.为 source set 组装 JAR build.gradle task intTestJar(type: Jar) { from sourceSets.intTest.output } 为 source set 生成 javadoc: 例22.9.为 source set