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