[英]How to update a boolean value in the GAE datastore?
我從Andreas Borglin的教程中得到以下代碼:
@Override
public Model saveModel(Model model) {
System.out.println("model isDone: " + ((Task)model).getDone());
PersistenceManager pm = PMF.get().getPersistenceManager();
Model savedModel = null;
try {
savedModel = pm.makePersistent(model);
} catch (JDOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
pm.close();
}
System.out.println("savedModel isDone: " + ((Task)savedModel).getDone());
System.out.println("model isDone: " + ((Task)model).getDone());
return savedModel;
}
它在我創建測試實體時工作正常,但是一旦我想更新它們,布爾值就不會改變。 我保存的“isDone”是“true”,我想將其更改為“false”。 這是輸出:
model isDone: false
savedModel isDone: true
model isDone: false
更改字符串或設置日期可以正常工作。 該字段定義為:
@Persistent
private boolean isDone = true;
我也嘗試過:
@Persistent
private Boolean isDone;
在這種情況下,isDone總是“假”。
不確定您遇到的具體問題,但我建議在布爾基元類型上使用布爾對象。 也就是說,使用:
@Persistent
private Boolean isDone;
如果在已經創建了一些實體后添加了一個原始布爾字段,則數據存儲區在實例化舊對象時會出現問題,因為它們的值將是該字段的值。 使用Boolean,它們只是默認為“null”,這已經足夠了。
此外,或許可以考慮不明確定義布爾字段的真值,這可能是此數據存儲混亂的原因。 但是,您必須將您的字段更改為“isNotDone”。
嘗試使用
@Persistent
private Boolean isDone = Boolean.True;
我之前使用過布爾,它對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.