我有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”。