2010-08-28 91 views
4

我從安德烈亞斯Borglin的tutorial下面的代碼:如何更新在GAE數據存儲中的布爾值?

@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始終是 「假的」。

回答

0

嘗試使用

@Persistent

私人布爾isDone = Boolean.True;

我已經使用布爾之前,它爲我工作。

3

不知道你遇到的具體問題,但我建議使用Boolean對象在布爾基本類型。也就是說,使用:

@Persistent 
private Boolean isDone; 

如果添加一個原始的布爾字段,您已經創建了一些實體之後,數據存儲有,因爲他們的這個字段的值將是實例較舊的對象問題。使用布爾值,他們只是默認爲「null」,這已經足夠好了。

也或許認爲沒有明確定義的布爾領域的真正價值,這可能是該數據存儲混亂的原因。不過,您必須將您的字段更改爲「isNotDone」。