createOrUpdate()始终使用ORMLite在数据库中创建新条目

Que*_*mia 13 android ormlite

在我的Android项目中,ORMLite充当缓存.我正在从Web服务器下载数据并将其放入数据库中.我正在调用createOrUpdate我的对象,但重复数据库出现在数据库中.除了主键(它只是一个自动递增的整数)之外,数据库条目是相同的.我认为,由于我的第二个对象还没有主键,因此ORMLite认为两者是不同的,即使每个其他字段都相同.

有没有人知道这是不是真的?

Gra*_*ray 17

createOrUpdate除非您的对象设置了id字段,否则不应该调用.的方式ORMLite决定了它是否存在于数据库是做一个查询通过ID就可以了.代码确实:

ID id = extractId(data);
// assume we need to create it if there is no id  <<<<<<<<<<<<<<<<<<<<<<<
if (id == null || !idExists(id)) {
    int numRows = create(data);
    return new CreateOrUpdateStatus(true, false, numRows);
} else {
    int numRows = update(data);
    return new CreateOrUpdateStatus(false, true, numRows);
}
Run Code Online (Sandbox Code Playgroud)

我将扩展javadoc以更好地解释这一点.他们在那里非常弱小.抱歉.我已将它们更新为:

如果数据库中的项目不存在,这是一种方便的方法.从数据参数中提取id,并在数据库上进行query-by-id.如果存在具有相同id的数据库中的行,则将从data参数中的字段更新数据库中的所有列.如果id为null(或0或某个其他默认值)或数据库中不存在,则将在数据库中创建该对象.这也意味着您的数据项必须定义一个id字段.

  • 带有`generatedId = true`数据库字段注释的列怎么样?此外,它始终在数据库中创建一个新条目.见[`Bug#173`](http://sourceforge.net/p/ormlite/bugs/173/). (2认同)