我有一个使用 JPA 注释映射的域对象。 User
有许多 Question
对象(可能是 1000 个)。我必须将用户对象中问题列表的获取类型设置为eager
。我在网络服务中有这样的路径:
GET/users/3
这当然会返回用户对象以及他/她编写的所有问题。 问题
有其自己的关系等等......
我的担忧是获得特定用户需要花费一点时间。最好只获取一些问题,然后根据需要加载更多问题。但是,我认为我无法使用这些注释来做到这一点。那么我是否需要删除这些注释,而是手动查找特定用户的问题,然后将子集分配给该用户?
在网络服务中解决此类情况的常用方法是什么?如果提供示例/伪代码,我们将非常感激。我正在使用 Spring MVC 3.2。
最佳答案
有多种方法可以处理这个问题。以下是我所知道的一些:
- 不要返回整个用户,只返回他的“顶级数据”。有其他网址来获取其余数据。 EG:
/users/1/questions
获取问题。 - 分页,正如 svz 在评论中所说。实现此目的的一种方法是让用户传入
限制
和偏移
。 - 1 和 2 的组合。
- 有时,rest api 有一个可以传入的
expand=true
参数。如果该参数为 false,它将返回“顶级数据”。如果这是真的,它将返回用户及其所有问题。只有当您明确要求时,您才能获得所有数据。
关于java - 避免在 RESTful Web 服务中加载整个对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451428/