2011-11-25 23 views
14

AndroidでORMLiteのBaseDaoImplクラスを拡張する方法があるかどうかは疑問です。私のAndroidプロジェクトでは、さまざまなDaoオブジェクトを使用してさまざまなビジネスオブジェクトにアクセスしています。私のビジネスオブジェクトは異なるテーブルに格納され、2つのメンバ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注釈には、daoClassというフィールドがあり、これを使用して構築するDAOクラスを指定できます。ここで

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アノテーションのサブセットをサポートしていますが、アンドロイドfuはまだ必要です。 – Gray

関連する問題