簡體   English   中英

如何更新GAE數據存儲區中的布爾值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM