3

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;
}

我应该选择哪一个?

everytime blogDAO.get(id); 每个查询的第一个都会加载所有用户数据,这会很慢还是浪费时间?

4

3 回答 3

2

我建议#3 ;) :

@Entity
public class Blog {
   @Id ObjectId id;
   ObjectId authorId;
     ...
   String firstName;
   String lastName;
     ...
   String content;
}

Mongodb 非常适合数据非规范化,所以我的意见是您需要在博客文章中添加一些与用户相关的数据,以便快速显示博客文章列表。如果您需要更多用户信息然后存在于博客文档中(例如用于显示博客),您可以先加载博客,然后再加载用户。当他更新他的个人资料时,您还需要更新每个用户博客中的用户数据。

于 2011-05-23T06:21:44.023 回答
2

我会建议类似:

@Entity
public class Blog {
   @Id ObjectId id;
   @Reference(lazy = true) User author;

以及具有非规范化字段。这样您就可以访问 User 对象,但 Morphia 只会在需要时加载它。

注意:你需要在你的类路径中使用 cglib 和 proxytools 才能工作。请参阅:http ://code.google.com/p/morphia/wiki/Dependencies

于 2011-07-14T17:53:44.480 回答
0

看看这篇文章, http: //valyagolev.net/article/mongo_dbref/。它提供了一些关于 DBRefs 的信息。

很大程度上取决于用例,但实际上,一般的经验法则是避免使用 DBRef,除非绝对需要。如果您可以通过使用嵌入式属性逃脱(尽一切努力这样做),您应该这样做。

但是,如果您的访问模式是这样的,您并没有真正获得您在父项中引用的项目,那么您可以使用简单的基于 objectid 的引用而不是 dbref。

于 2011-05-22T23:15:32.267 回答