2012-06-05 8 views
2

La morphée unique BasicDAO gère/interroge plusieurs collections, peut être en surchargeant la fonction avec le paramètre de classe. Y at-il un autre moyen de demander deux collectes différentes en utilisant DOA unique ou il est préférable de faire DAO séparé pour chaque collection.Morphia Single dao pour la collecte multiple MongoDB

Exemple pour l'utilisateur et BlogEntry Collections

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

Répondre

1

La réponse est NON,

Le BasicDAO est fait fait sur l'hypothèse de traiter seule collection/Entité autant de la fonction de DOA sont Entité/classe et _id/type de clé primaire à base.

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

T doit être une classe spécifique
K doit être une clé spécifique (peut être séparée pour différentes classes), par exemple ObjectId, String, Long etc

Exemple fonction

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

Si vous souhaitez gérer plusieurs collectes dans un DAO unique, créez votre propre DAO générique avec des méthodes personnalisées et utilisez DataStore pour gérer des collections différentes/spécifiques.

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

comment vous vous ajoutez la classe dans Morphia mappeur – mtariq

+1

vous pouvez ajouter method''protected initTypes vide (classe ..types) '' –

1

Je pense que l'intention du DAO au sein Morphia est d'avoir des objets d'accès aux données distinctes pour chaque classe/collection.

Je voudrais faire deux classes distinctes qui étendent BasicDao.

Je suis sûr que vous pourriez l'implémenter comme vous le suggérez, en surchargeant les méthodes requises, mais l'idée est d'avoir un objet par lequel vous obtenez les données pour un modèle donné.

Questions connexes