2

我有一个使用 JPA 注释映射的域对象。有User很多Question对象(可能是 1000 个)。我必须将用户对象中问题列表上的获取类型设置为eager. 我在网络服务中有这样的路径:

GET /users/3

这当然会返回用户对象,以及他/她编写的所有问题。有自己的Question关系等等...

我的担心是获得特定用户需要一点时间。最好只得到一些问题,然后根据需要加载更多。但是,我认为我不能用这些注释来做到这一点。那么我是否需要删除这些注释,而是手动查找特定用户的问题,然后为用户分配一个子集?

在 Web 服务中解决此类情况的常用方法是什么?如果提供示例/伪代码将非常有用。我正在使用 Spring MVC 3.2。

4

2 回答 2

3

有多种方法可以处理这个问题。以下是我所知道的一些:

  1. 不要返回整个用户,只返回他的“顶级数据”。有其他网址来获取其余数据。EG:/users/1/questions回答问题。
  2. 分页,正如 svz 在评论中所说。一种方法是让用户传入 alimit和 an offset
  3. 1和2的组合。
  4. 有时rest apis有一个expand=true可以传入的参数。如果为false,它将返回“顶级数据”。如果它是真的,它会返回一个用户所有的问题。如果您明确要求,您只会获得所有数据。
于 2013-08-26T19:28:46.900 回答
0

我认为答案是 JPA 和实体本身。在使用 JPA + Hibernate 时,我们也有一些用例需要返回大量数据,但不包括相关数据。转换这些 JPA 实体实在是太痛苦了。

因此,我们决定如何解决这些问题:

  1. 以必要的级别查询我们需要的数据
  2. 使用必要的数据分离对象
  3. 修剪/删除我们不需要的所有数据/关系以及对象及其属性
  4. 转换为 JSON 并返回

如果您需要维护关系,请考虑使用这样的图形构建器:http ://code.google.com/p/google-gson/source/browse/trunk/extras/src/main/java/com /google/gson/graph/GraphAdapterBuilder.java?r=1170

于 2013-09-23T21:09:56.300 回答