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

4

我有以下来自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始终为“false”。
2个回答

3

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

@Persistent
private Boolean isDone;

如果在创建某些实体之后添加一个原始的布尔字段,那么Datastore在实例化旧对象时会出现问题,因为它们的该字段值将为“null”。使用布尔值时,它们只是默认为“null”,这已经足够好了。
此外,也许考虑不要明确定义布尔字段的true值,这可能是导致Datastore混乱的原因。您需要将该字段更改为类似于“isNotDone”的东西。

0

尝试使用

@Persistent

private Boolean isDone = Boolean.True;

我以前使用过Boolean,它对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接