2011-01-21 12 views
0

ormliteオブジェクトの単純な削除を実行しています。コードは以下の通りです。しかし、何があっても、オブジェクトは決して削除されません。OrmLiteの削除に失敗しました

Dao<Subscription, Object> dao = helper.getSubscriptionDataDao(); 

dao = helper.getSubscriptionDataDao(); 
QueryBuilder<Subscription, Object> query = dao.queryBuilder(); 
query.where().eq("key", subKey); 
Subscription sub = dao.queryForFirst(query.prepare()); 
int r = dao.delete(sub); // r is 1 

ここに何か不足していますか?

+0

いつもロールバックされているSeymore?同じキーで複数のサブスクリプションがあるとしたら?削除の直後にqueryForFirstを実行すると、同じサブスクリプションが返されますか? – Gray

答えて

2

これは私が問題を解決する方法です:オブジェクトにプライマリキーがあることを確認してください。フィールドをIDとして設定しても、IDが自動生成されるわけではありません。 IDがなければ、削除は失敗します。

+0

だから、dao.delete()から1つ戻ってきましたが、IDは設定されていませんでしたか?何を削除しましたか? – Gray

+0

はい、そうです。オブジェクトDatabaseFieldはIDに設定されていますが、自動生成IDではないので、IDの印刷を行うと何とかnullになります。オブジェクトIDフィールドをauto-generate = trueに設定すると、削除は成功します。バグのように聞こえる。お役に立てれば。 –

+0

ああ、これは今私にとって意味がある。 nullキーを持つデータベースの最初の行を削除していました。複数ある必要があります。 'id = true'と' generatedId = true'の間に不足しているドキュメントがあるかどうかを教えてください。 – Gray

0

Delete.QueryBuilderには、Select Queryを選択するためにDeleteBuilderを作成する必要があります。

public int deleteByObjectId(int objectId) throws SQLException, java.sql.SQLException 
{ 
    DAL<T> helper= new DAL<T>(_context, type); 
    RuntimeExceptionDao<T, Integer> dao =helper.getSimpleDataDao2(); 
    DeleteBuilder<T, Integer> delBuilder =dao.deleteBuilder();  
    delBuilder.where().eq("ObjId", objectId); 
    PreparedDelete<T> prepareQery=delBuilder.prepare(); 
    int i=dao.delete(prepareQery); 
    return i; 
} 
関連する問題