2012-06-05 3 views
2

morphia 단일 BasicDAO 처리/여러 컬렉션을 쿼리 할 수 ​​있습니다 의해 클래스 매개 변수를 사용하여 오버로드 할 수 있습니다.Morphia 다중 컬렉션을위한 단일 DAO MongoDB

public class GenericDAO extends BasicDAO<T, K> { 

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

내가 하나의 DOA를 사용하여 두 개의 서로 다른 모음을 조회 할 수있는 다른 방법이 있나요 또는 각 컬렉션에 대한 별도의 DAO를 확인하는 것이 좋습니다. 사용자 및 블로그 항목 컬렉션

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

답변

1

,

BasicDAO은 법인/클래스 및 _id/기본 키 타입 기반이 DOA의 기능의 많은으로 하나의 모음/법인 다루는 가정에있는 제작한다.

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

T는, 예를 들어 ObjectId가, 문자열 등

예 기능

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

롱 (다른 클래스에 대한 분리 될 수 있습니다)
K는 특정 키해야 특정 클래스해야한다 단일 DAO에서 다중 콜렉션을 처리하고 싶다면 커스텀 메소드로 자신의 제네릭 DAO를 만들고 데이터 스토어를 사용하여 다른/특정 콜렉션을 처리하십시오.

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를 확장하는 두 개의 별도 클래스를 만들 것입니다.

필자가 제안한대로 메서드를 오버로드하면 구현할 수 있지만, 특정 모델에 대한 데이터를 가져 오는 데 사용되는 개체가 하나있는 것이 좋습니다.

간단한 대답은 NO입니다