为了简单起见,我有这个模型:
@Table(name = "Items")
class TItem extends Model {
@Column(name = "title")
private String mTitle;
public String getTitle() { return mTitle; }
public void setTitle(String title) { mTitle = title; }
}
我的测试也失败了:
//Create new object and save it to DDBB
TItem r = new TItem();
r.save();
TItem saved = new Select().from(TItem.class).where("id=?", r.getId()).executeSingle();
//Value for saved.getTitle() = null --> OK
r.setTitle("Hello");
r.save();
saved = new Select().from(TItem.class).where("id=?", r.getId()).executeSingle();
//Value for saved.getTitle() = "Hello" --> OK
r.setTitle(null);
r.save();
saved = new Select().from(TItem.class).where("id=?", r.getId()).executeSingle();
//Value for saved.getTitle() = "Hello" --> FAIL
在ActiveAndroid中,我似乎无法将列值从任何值更改为null。很奇怪。是虫子吗?我没有找到任何关于它的东西,但看起来很基本的功能。
如果我调试应用程序并遵循保存方法,它到达的最后一个命令是SQLLiteConnection.java:
private void bindArguments(PreparedStatement statement, Object[] bindArgs) {
....
// It seems ok, as it is really inserting a null value in the DDBB
case Cursor.FIELD_TYPE_NULL:
nativeBindNull(mConnectionPtr, statementPtr, i + 1);
....
}
我无法进一步查看,因为“nativeBindNull”不可用
2条答案
按热度按时间mo49yndu1#
最后我发现发生了什么,问题出在ActiveAndroid库中。
空值被正确保存到DDBB,但未正确检索。由于ActiveAndroid使用缓存项,当获取一个元素时,它会获取一个“旧版本”并使用新值更新它。这里是库失败的地方,因为它检查如果不是null,则替换值,否则,则不替换。
要解决这个问题,我们必须在库中更改它,在类www.example.com中Model.java:
wnrlj8wa2#
您可以通过Update对象保存字段\fields:
如果添加引号,则值将保存为文本: