2010-08-28 48 views
4

我从安德烈亚斯Borglin的tutorial下面的代码:如何更新在GAE数据存储中的布尔值?

@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

尝试使用

@Persistent

私人布尔isDone = Boolean.True;

我已经使用布尔之前,它为我工作。

3

不知道你遇到的具体问题,但我建议使用Boolean对象在布尔基本类型。也就是说,使用:

@Persistent 
private Boolean isDone; 

如果添加一个原始的布尔字段,您已经创建了一些实体之后,数据存储有,因为他们的这个字段的值将是实例较旧的对象问题。使用布尔值,他们只是默认为“null”,这已经足够好了。

也或许认为没有明确定义的布尔领域的真正价值,这可能是该数据存储混乱的原因。不过,您必须将您的字段更改为“isNotDone”。