greendao DaoException实体没有密钥

时间:2013-11-07 15:28:03

标签: greendao

使用GreenDao,我以某种方式设法将我的数据库置于一个没有密钥的实体的状态。

我的问题是如何清除/删除此实体?我没有在AbstractDao中看到一个允许我删除另一个列名的函数。

2 个答案:

答案 0 :(得分:0)

您可以编写原始SQL查询来删除该行,并使用您可以从可读DaoSession中获取的SQLiteDatabase执行该行。

DELETE FROM YourTable WHERE someColumn=?

如果你想避免拼写错误,可以使用greendao的表格信息:

String query = "DELETE FROM " + YourDao.TABLENAME +
               " WHERE " + YourDao.Properties.SomeColumn.columnName + "=?";

有关详情:

根据您创建架构的方式,存在一些缺陷:

如果您使用AUTOINCREMENTNOT NULL创建了主键,则greendao将无法正确插入主键!

在分配自动增量主键的情况下,主键始终为0,导致在第二行插入表格时出现禁令违规行为。

因此,如果您不想处理greendao-sourcecode,则不应使用notNull().primaryKey().autoincrement()

我已经对greendao-core做了一些小改动,以便能够使用上层语句,但是如果只使用primaryKey().autoincrement(),一切都应该运行良好。

答案 1 :(得分:0)

主键本身是唯一的而不是null,即使我明确提到它(不是null()。primaryKey()),它应该完美无缺。我想指出,我是做错了还是greenDA出了问题。 是否有任何来自greenDAO的消息来解决即将发布的版本中的问题。

我没有太多的声誉,否则我会在评论中提出这个问题。