我有以下代码来自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总是“假”。
答案 0 :(得分:3)
不确定您遇到的具体问题,但我建议在布尔基元类型上使用布尔对象。也就是说,使用:
@Persistent
private Boolean isDone;
如果在已经创建了一些实体后添加了一个原始布尔字段,则数据存储区在实例化旧对象时会出现问题,因为它们的值将是该字段的值。使用Boolean,它们只是默认为“null”,这已经足够了。
另外,也许可以考虑不明确定义布尔字段的真值,这可能是此数据存储混乱的原因。但是,您必须将字段更改为“isNotDone”。
答案 1 :(得分:0)
尝试使用
@Persistent
private Boolean isDone = Boolean.True;
之前我使用过布尔值,它对我有用。