2012-01-16 81 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