2011-01-21 5 views
0

ormite 오브젝트를 삭제하는 중입니다. 코드는 다음과 같습니다. 그러나 무엇을 상관없이, 객체는 절대로 삭제되지 않습니다.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

Select for Query에 대해서만 Delete.QueryBuilder에 대해 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; 
} 
관련 문제