2011-11-25 1 views
14

BaseDaoImpl 클래스를 ORMLite로 확장 할 수있는 방법이 있는지 궁금합니다. 내 안드로이드 프로젝트에서 여러 Dao 개체를 사용하여 여러 비즈니스 개체에 액세스하고 있습니다. 내 비즈니스 개체는 서로 다른 테이블에 저장되며 모두 Long id;Long objectId; 두 개의 멤버가있는 BusinessObject 기본 클래스에서 상속받습니다. 여기서 id은 데이터베이스 테이블 내의 개체의 실제 고유 ID입니다.기능을 확장하기 위해 Android에서 ORMLite의 BaseDaoImpl 클래스를 확장하는 방법

public abstract class BusinessObject{ 

    public static final String ID_COLUMN_NAME = "_id"; 
    public static final String OBJECT_ID_COLUMN_NAME = "object_id"; 

    @SerializedName(value="_id") 
    @DatabaseField(canBeNull=false, columnName = ID_COLUMN_NAME, generatedId=true) 
    private int id; 

    @SerializedName(value="id") 
    @DatabaseField(canBeNull=false, columnName=OBJECT_ID_COLUMN_NAME, index=true, unique = true)  
    private long objectId; 
} 

이제 비즈니스 객체를 id 및 objectId로 삭제할 수 있기를 원합니다. id로 삭제하는 것은 물론 BaseDaoImpl 클래스로 인해 가능합니다. 그것도 objectId에 의해 삭제할 수 있도록 BaseDaoImpl 클래스를 확장하고 일반 메서드 deleteByObjectId() 메서드를 추가하는 방법에 대해 생각했습니다. 메서드 내에서 PreparedDelete 문을 사용하는 dao의 delete() 메서드를 사용하여 개체를 삭제합니다.

public class ExtendedDaoImple<T, ID> extends BaseDaoImpl<T, ID> implements ExtendedDao<T, ID> { 

    protected ExtendedDaoImple(Class<T> dataClass) throws SQLException { 
     super(dataClass); 
    } 

    public int deleteByObjectId(long objectId) throws SQLException { 
     DeleteBuilder<T, ID> delBuilder = (DeleteBuilder<T, ID>) deleteBuilder();  
     delBuilder.where().eq(BusinessObject.OBJECT_ID_COLUMN_NAME, objectId).prepare(); 
     return delete(delBuilder.prepare()); 
    } 
} 

내 문제는 내가 OrmLiteSqliteOpenHelper 클래스를 형성 ExtendedDaoImpl 클래스의 인스턴스를 생성하는 방법을 모른다는 것이다. 일반적으로 Dao는 OrmLiteSqliteOpenHelper 클래스의 getDao() 메서드를 호출하고 Dao를 사용해야하는 BusinessObject 클래스를 전달하여 만들어집니다. 예 :

Dao<Image, Long> imageDao = getDao(Image.class); 

그래서 ExtendedDaoImpl 개체를 대신 BaseDaoImpl 개체의 검색 할 수있는 방법으로 OrmLiteSqliteOpenHelper 클래스를 수정하는 방법은 무엇입니까? 내 문제는 내가 OrmLiteSqliteOpenHelper 클래스를 형성 ExtendedDaoImpl 클래스의 인스턴스를 만드는 방법을 모르겠입니다

답변

20

...

멋지게 내용의 질문. @DatabaseTable 주석에는 구성 할 DAO 클래스를 지정하는 데 사용할 수있는 daoClass 필드가 있습니다. 여기 http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/table/DatabaseTable.html#daoClass()

DaoManager 용 문서이다.

http://ormlite.com/docs/dao-manager

클래스가 ConnectionSourceClass 인수 생성자가 필요합니다.

해결책은 잘 문서화되어 있지 않습니다. 문서를 개선 할 수있는 아이디어가 있다면 알려주십시오.

+0

대단원! 완벽하게 작동합니다. 빠른 지원에 다시 한 번 감사드립니다! 너는 잘하고있어! 나는 그것이 정말로 늦었고 분명히이 섹션을 간과 했으므로 문서를 간략하게 살펴 보았다는 것을 인정해야한다. 그것을 읽은 후에 나는 그렇게 나쁜 것이 아니라고 생각한다. 분명히 나를 찾아내는 것이 더 어려웠습니다. ;) – Flo

+0

표준 JPA 주석을 사용하여이를 수행 할 수 있습니까? – Buckstabue

+0

@ Buckstabue 무엇을할까요? ORMLite는 클래스를 마크 업하기 위해 JPA 주석의 하위 집합을 지원하지만, android fu는 여전히 필요합니다. – Gray