我正在研究Morphia,但与DBRef混淆了

时间:2011-05-22 08:50:16

标签: 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);每个查询的第一个将加载所有用户数据, 这可能是非常缓慢或浪费时间?

3 个答案:

答案 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。