2014-11-17 2 views
2

Я использую Objectify и имею базовый объект, из которого все остальные сходят. Этот базовый объект имеет флаг с неизмененным обновлением, который устанавливается классами потомков при изменении значения свойства объекта, которое необходимо сохранить. Я делаю это, чтобы предотвратить ненужные записи в хранилище данных при синхронизации данных с клиентами.Objectify, аннотация @ignore и кеширование

Базовый объект выглядит следующим образом

@Cache 
public abstract class WordBuzzEntity { 

    @Ignore 
    private boolean updated = false; 

    public boolean isUpdated() { 
     return updated; 
    } 

    public void setUpdated() { 
     updated = true; 
    } 

    public void save(boolean async) { 
     if (!updated) 
      return; 

     if (async) 
      ofy().save().entity(this); 
     else 
      ofy().save().entity(this).now(); 
    } 
} 

я заметил при загрузке пользователей

User user = ofy().load().type(User.class).id(LoginTest.TEST_ID).now(); 

Это обновленный флаг иногда установлен в истинное значение в точке нагрузки.

Это из-за кеша сеанса Objectify или memcache? Не игнорируются ли свойства, кэшированные в этом случае, когда объект перезагружается?

Добавление строки для обновления обновлено до значения false в точке сохранения разрешает мою проблему, но я хотел бы понять, что происходит.

ответ

2

Кэш сеанса Objectify хранит экземпляры объектов, поэтому игнорируемые поля фактически не игнорируются, когда элемент загружается из кеша, поскольку он просто подтягивает последний экземпляр, а не создает новый.

+0

Нет ли обходного пути для этого? – Ajeet

+0

@Ajeet Вам нужно будет написать что-то, чтобы очистить игнорируемые поля при загрузке элементов, чтобы убедиться, что они установлены в значения по умолчанию. –

+0

Кажется хорошей альтернативой, но тогда мне нужно будет сделать дополнительную операцию записи. – Ajeet

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