2012-01-16 79 views
1

我已經成功地創建表ORMLite,它看起來像它適當補充UUID列作爲主鍵,索引等使用UUID作爲ORMLite(安卓)ID

public class Stat { 
    @DatabaseField(id = true) 
    protected UUID uuid = UUID.randomUUID(); 
... 

現在,我希望能夠使用DAO的全功率提供並做(Stat公司是我的同班同學被持久化,getUUID()返回UUID):

Stat statClassInstance = new Stat(); 
RuntimeExceptionDao<Stat, Integer> statDao = getHelper().getStatDataDao(); 

statDao.deleteById(statClassInstance.getUUID()); 

編譯器是給我的錯誤:

The method deleteById(Integer) in the type RuntimeExceptionDao<Stat,Integer> is not applicable for the arguments (UUID) 

我缺少的是如何在接受整數的方法中使用UUID ID的方法,如deleteById。 我讀過UUID,因爲ID被合併到ORMLite中,但沒有提及它是否僅僅使它們成爲主鍵,不支持所有這些幫助器方法(queryForId,deleteIds)等。

+0

你爲什麼不刪除記錄的statData。刪除(statClassInstance)。你通常會在模型類(你的statClassInstance)中覆蓋hashCode()equals(),並且應該像例子一樣工作。你建立你的記錄列表來刪除然後迭代和刪除它們。 – 2012-01-16 13:35:15

+0

更多字段使用generatedId --- http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#SEC21 – 2012-01-16 13:40:47

+0

我經常有情況,我只有UUID而不是實例化的對象。創建'虛擬'對象只是爲了從數據庫中刪除它看起來不像是有效/乾淨的方式來做到這一點。 – tmouse 2012-01-16 13:42:26

回答

6

按順序爲了使用deleteById(ID)方法,Dao<T,ID>應該相應地用你的T類中已經識別的相應參數創建。該ID將被解釋爲您在T類中定義爲主鍵的任何類型。在這種特殊情況下,UUID類型來看,在DAO一直用Dao<Stat, Integer>創建,應該已經創建了以下異常:

Dao<Stat, UUID> statDao = DaoManager.createDao(connSource, Stat.class); 

希望這有助於

+0

這是正確的謝爾蓋,但最好在這裏提供一些上下文,而不只是修復。 – Gray 2012-01-16 14:52:27

+0

對不起,先生,下次再做。此修復程序針對此特定情況提供。我將在下次添加更多肉來形容它。 – 2012-01-16 15:11:52

+0

Np。但是,您應該編輯您的答案,以便現在提供更多上下文。請記住,你不僅要回答這個問題,而且要爲那些一年後提出這個問題的人談論後代。 – Gray 2012-01-16 15:21:27