Mongodb I';我在研究Morphia,但和DBRef混淆了
1Mongodb I';我在研究Morphia,但和DBRef混淆了,mongodb,morphia,dbref,Mongodb,Morphia,Dbref,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);每个查询的第一个将加载所有用户数据, 这会
@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);每个查询的第一个将加载所有用户数据,
这会很慢还是浪费时间 看看这篇文章。它提供了一些关于DBRefs的信息 这在很大程度上取决于用例,但实际上,一般的经验法则是避免使用DBREF,除非绝对需要。如果您可以通过使用嵌入属性来摆脱(尽一切努力),那么您应该这样做 但是,如果您的访问模式是这样的,以致于您无法通过父项真正获取所引用的项,那么您可以使用简单的基于objectid的引用,而不是dbref 我建议:
Mongodb非常适合数据非规范化,所以我的意见是,您需要在博客文章中添加一些与用户相关的数据,以便快速显示博客文章列表。如果您需要更多的用户信息,然后存在于博客文档中(例如博客显示),您可以先加载博客,然后加载用户。当每个用户更新其个人资料时,您还需要更新其博客中的用户数据 我建议如下:
@Entity
public class Blog {
@Id ObjectId id;
@Reference(lazy = true) User author;
以及具有非规范化的字段。通过这种方式,您可以访问用户对象,但Morphia将仅在需要时加载它
注意:您需要在类路径中使用cglib和proxytools才能工作。请参阅:我很困惑为什么这么多morphia示例使用@References,似乎它通常被滥用,因为morphia自动加载ref。在这个场景中:用户{followersList,followersList},我应该使用List还是List,如果我在获得一个用户时使用ref,我可以直接获得所有的追随者,但似乎检索一个用户,可以导致递归检索一个用户网络,似乎我必须对followersList中的每个id进行查询?
@Entity
public class Blog {
@Id ObjectId id;
@Reference(lazy = true) User author;