2

morphia の単一の BasicDAO で複数のコレクションを処理/クエリできるかどうかは、クラス パラメーターを使用して関数をオーバーロードすることによる可能性があります。

public class GenericDAO extends BasicDAO<T, K> {

  /* override count impl*/
  public long count(Class<T> clazz) {
     return ds.getCount(clazz);
  }
}

単一の DOA を使用して 2 つの異なるコレクションを照会できる他の方法はありますか、またはコレクションごとに個別の DAO を作成する方がよいでしょう。

User および BlogEntry コレクションの例

public class BlogEntryDAO extends BasicDAO<BlogEntry, ObjectId>
public class UserDAO extends BasicDAO<User, ObjectId>
4

2 に答える 2

1

Morphia内のDAOの目的は、クラス/コレクションごとに個別のデータアクセスオブジェクトを用意することだと思います。

それぞれがBasicDaoを拡張する2つの別々のクラスを作成します。

必要なメソッドをオーバーロードすることで、提案どおりに実装できると確信していますが、アイデアは、特定のモデルのデータを取得するための1つのオブジェクトを持つことです。

于 2012-06-05T17:42:06.457 に答える
1

簡単な答えはノーです。

DOAの機能の多くはエンティティ/クラスと_id/主キー型ベースであるため、BasicDAOは単一のコレクション/エンティティを扱うことを前提に作られています。

public class BasicDOA<T,K> implements DOA<T,K>

T は特定のクラスである
必要があります K は特定のキーである必要があります (クラスごとに個別にすることができます)。例: ObjectId、String、Long など

関数の例

public Class<T> getEntityClass()
public T get(K id)

単一の DAO で複数のコレクションを処理する場合は、カスタム メソッドを使用して独自の汎用 DAO を作成し、DataStore を使用して異なる/特定のコレクションを処理します。

public class MyDAO {
  protected DatastoreImpl ds;

  public count(Class<T> clazz) {
    return ds.getCount(clazz);
  }

  public T get(Class<T> clazz, K id) {
     return ds.get(clazz, id);
  }
}
于 2012-06-07T12:56:34.723 に答える