簡単にするために、次のモデルがあります。
@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」が利用できないため、これ以上見ることができません