如何更新GAE数据存储区中的布尔值?

时间:2010-08-28 13:23:44

标签: java google-app-engine google-cloud-datastore

我有以下代码来自Andreas Borglin的tutorial

@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总是“假”。

2 个答案:

答案 0 :(得分:3)

不确定您遇到的具体问题,但我建议在布尔基元类型上使用布尔对象。也就是说,使用:

@Persistent
private Boolean isDone;

如果在已经创建了一些实体后添加了一个原始布尔字段,则数据存储区在实例化旧对象时会出现问题,因为它们的值将是该字段的值。使用Boolean,它们只是默认为“null”,这已经足够了。

另外,也许可以考虑不明确定义布尔字段的真值,这可能是此数据存储混乱的原因。但是,您必须将字段更改为“isNotDone”。

答案 1 :(得分:0)

尝试使用

  

@Persistent

     

private Boolean isDone = Boolean.True;

之前我使用过布尔值,它对我有用。