如果id和number相同,我只希望ormlite更新行,否则它应该创建一个新行(我使用的是createorupdate方法)。 是的,你不能用 createOrUpdate(...) 但是,您应该能够添加自己的dao方法来很好地模拟它。如果 ID 如果不是唯一的,则需要创建另一个id字段作为标识并使用 ID 作为另一个领域,可能有 uniqueCombo 限制。
@DatabaseField(generatedId = true)
private int uniqueId;
// not the id field because it is not unique
@DatabaseField
private int id;
@DatabaseField
private int number;
public CreateOrUpdateStatus createOrUpdate(Foo data) throws SQLException {
QueryBuilder<Foo, Integer> qb = queryBuilder();
// NOTE: id here is not the identity field
qb.where().eq("id", data.id).and().eq("number", data.number);
Foo existing = qb.queryForFirst();
if (existing == null) {
int numRows = create(data);
return new CreateOrUpdateStatus(true, false, numRows);
} else {
int numRows = update(data);
return new CreateOrUpdateStatus(false, true, numRows);
}
}
2条答案
按热度按时间oalqel3c1#
通读本文和ormlite文档;多个主键-ormlite
我不能百分之百肯定这个答案。
uniqueCombo = true
似乎是一个很好的猜测,但我不确定,如果事情,如更新和删除仍然工作,然后。你得自己测试一下。wfveoks02#
如果id和number相同,我只希望ormlite更新行,否则它应该创建一个新行(我使用的是createorupdate方法)。
是的,你不能用
createOrUpdate(...)
但是,您应该能够添加自己的dao方法来很好地模拟它。如果ID
如果不是唯一的,则需要创建另一个id字段作为标识并使用ID
作为另一个领域,可能有uniqueCombo
限制。在dao类中,重写
BaseDaoImpl
类并重写createOrUpdate(...)
方法。它应该像这样做:作为优化,您可以使用
ThreadLocalSelectArg
参数,然后只需设置参数并在createOrUpdate(...)
方法。