Morphia Single dao用于多个集合MongoDB

时间:2012-06-05 15:44:31

标签: mongodb dao morphia

morphia单个BasicDAO可以处理/查询多个集合,可以通过使用类参数重载函数。

public class GenericDAO extends BasicDAO<T, K> {

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

有没有其他方法可以使用单个DOA查询两个不同的集合,或者最好为每个集合制作单独的DAO。

用户和BlogEntry集合的示例

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

2 个答案:

答案 0 :(得分:1)

我认为Morphia中DAO的目的是为每个类/集合提供单独的数据访问对象。

我会创建两个单独的类,每个类都扩展BasicDao。

我确信你可以按照你的建议实现它,通过重载所需的方法,但想法是有一个对象,通过它可以获得给定模型的数据。

答案 1 :(得分:1)

简单的答案是否定,

BasicDAO是在假设处理单个集合/实体的基础上制定的,因为DOA的许多功能都是基于实体/类和_id /主键类型。

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