1
@Entity
public class Blog {
@Id ObjectId id;
@reference User author;
String content;
}
或
2
@Entity
public class Blog {
@Id ObjectId id;
ObjectId authorId;
String content;
}
我应该选择哪一个?
eveytime blogDAO.get(id);每个查询的第一个将加载所有用户数据, 这可能是非常缓慢或浪费时间?
答案 0 :(得分:2)
我建议#3;):
@Entity
public class Blog {
@Id ObjectId id;
ObjectId authorId;
...
String firstName;
String lastName;
...
String content;
}
Mongodb非常适合数据非规范化,所以我的意见是你需要在博客帖子中添加一些用户相关数据,以便快速显示博客帖子列表。如果您需要更多用户信息然后存在于博客文档中(例如,用于博客显示),您可以先加载博客然后再加载用户。此外,您还需要在更新其个人资料时更新每个用户博客中的用户数据。
答案 1 :(得分:1)
我会建议像:
@Entity
public class Blog {
@Id ObjectId id;
@Reference(lazy = true) User author;
还有非规范化的字段。这样您就可以访问User对象,但Morphia只会在需要时加载它。
注意:您需要在类路径中使用cglib和proxytools才能使用此方法。请参阅:http://code.google.com/p/morphia/wiki/Dependencies
答案 2 :(得分:0)
看看这篇文章http://valyagolev.net/article/mongo_dbref/。它提供了有关DBRefs的一些信息。
很大程度上取决于用例,但实际上,一般的经验法则是避免DBRef,除非绝对需要。如果你可以使用嵌入式属性逃脱(尽一切努力),你应该这样做。
但是如果你的访问模式是这样的,你没有真正得到你所指的父项,那么你可以使用简单的基于objectid的引用而不是dbref。