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

どちらを選ぶべきですか?

毎回 blogDAO.get(id); すべてのクエリの最初の 1 つは、すべてのユーザー データをロードします。

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/の記事をご覧ください。DBRefに関する情報を提供します。

多くはユースケースに依存しますが、実際には、絶対に必要な場合を除き、DBRef を避けるのが一般的な経験則です。埋め込みプロパティを使用して逃げることができる場合 (あらゆる試みを行う)、そうする必要があります。

しかし、親で参照しているアイテムを実際に取得できないようなアクセス パターンの場合は、dbref の代わりに単純な objectid ベースの参照を使用できます。

于 2011-05-22T23:15:32.267 に答える