我有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始终为“false”。

最佳答案

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

@Persistent
private Boolean isDone;

如果您在创建了某些实体后添加了原始布尔字段,则数据存储区将无法实例化较早的对象,因为该字段的值将为。使用布尔值时,它们只是默认为“null”,这已经足够了。

另外,也许考虑不为您的布尔字段明确定义一个真值,这可能是造成此Datastore混乱的原因。不过,您必须将字段更改为“isNotDone”。

10-04 13:40