如何使用Morphia的Manual ObjectID引用返回完整的json

时间:2014-08-04 20:16:20

标签: java json mongodb morphia

通常我会用这个:

public class Person {
...
@ID ObjectId id;
String name;

@Reference User user;
...
}

它存储用户的$ ref和objectId ......当我请求时我得到了json

 Person {
         id...
         User { 
               login:
               password:
               }
         }

但"他们"说不使用@Reference,使用手动参考存储

所以代替@Referente使用ObjectId userID;

但如果我使用它,我如何构建json以返回完整的用户?因为我无法做某事person.setUser(userFromDataBaseByStoredReferenceId);

或者我真的必须在课堂上使用2个attbrs,一个用于存储用户的ID,另一个用于#34;用户用户",所以我可以设置它并创建完整的json?

类似的东西:

public class Person {
...
@ID ObjectId id;
String name;

ObjectId userID;
User user; //so i have to fill this to build the full json, after doing a extra search by the userID
}

2 个答案:

答案 0 :(得分:0)

谁是“他们”?这取决于您的使用案例:

  • @Reference默认情况下急切加载所有引用的实体。如果您总是需要所有这些数据,这是正确的方法。
  • 如果您大多数时间不需要所有(引用的)数据,则可以将lazy属性添加到参考注释中。它只会在您实际访问数据时加载数据。
  • 如果您有非常大的实体并且很少需要遍历实体,您可以通过简单地添加用户的ObjectId来推出自己的参考方法。但是,您需要自己发出查询,而不再像person.getUser()那样访问它。

PS:您的JSON示例看起来有点像嵌入式实体。也许这对您的场景来说是更好的方法?

答案 1 :(得分:0)

您可以使用@PostLoad方法通过其id加载引用的实体。

@PostLoad
void postLoad() {
  this.user = UserDAO.get(userID);
}