2012-06-05 3 views
2

Может ли морфология singleJataDADA обрабатывать или запрашивать несколько коллекций, может быть перегружена функцией с параметром класса.Morphia Single dao для множественной коллекции MongoDB

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> 

ответ

1

Простой ответ НЕТ,

BasicDAO сделан исходя из предположения, чтобы иметь дело с одной коллекции/Entity как многие функции DOA являются Entity/Класс и тип ключа _id/первичной основе.

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

Т должен быть определенный класс
К должен быть определенный ключ (может быть отдельно для разных классов), например, ObjectId, String, Лонг т.д.

Пример функции

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

как вы добавляете класс в морфий картографа – mtariq

+1

вы можете добавить method''protected недействительным initTypes (класс ..types) '' –

1

Я думаю, что намерение DAO в морфий, чтобы иметь отдельные объекты доступа к данным для каждого класса/коллекции.

Я бы сделал два отдельных класса, каждый из которых расширяет BasicDao.

Я уверен, что вы можете реализовать его, как вы предлагаете, перегружая требуемые методы, но идея состоит в том, чтобы иметь один объект, через который вы получаете данные для данной модели.

Смежные вопросы