2010-08-28 9 views
4

У меня есть следующий код от Andreas 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;

Я использовал Boolean раньше, и это сработало для меня.

3

Не уверен в конкретной проблеме, которую вы имеете, но я рекомендую использовать Boolean-объект над булевым примитивным типом. То есть, использование:

@Persistent 
private Boolean isDone; 

Если добавить примитивное булево поле после того, как вы уже создали некоторые объекты, хранилище данных имеют проблемы инстанцирования старых объектов, так как их значения для этого поля будут. С Boolean они просто по умолчанию имеют значение «null», что достаточно хорошо.

Кроме того, возможно, не следует явно указывать истинное значение для вашего логического поля, что может быть причиной этого беспорядка хранилища данных. Тем не менее, вам придется изменить свое поле на «isNotDone».

Смежные вопросы