возможно ли получить объект Entity до того, как objectify сохранит его (и заполнит некоторые другие данные)

#objectify

#objectify

Вопрос:

У меня есть некоторая структура личных данных, смешанная со «стандартными полями». Я хотел бы избежать ручной работы с простыми полями (с собственным API хранилища данных):

 toPersist.setProperty("field1", value1);
toPersist.setUnindexedProperty("field2", value2);
 

но я все еще хочу получить предварительно заполненный экземпляр сущности toPersist , чтобы я мог добавлять свои собственные @Ignore поля самостоятельно

Например:

 Entity filled = OfyService.ofy().save().entity(this).fill();
filled.setProperty("mySpecialField", jsonValue);
//...
// I want to save my entities alone
datastore.put( filled );
 

и наоборот, я хотел бы получить объект Entity, представляющий каждую запись в load() вызове.

Возможно ли это? или мне нужно погрузиться в код Objectify, чтобы взломать его?

спасибо за ваши ответы

Ответ №1:

Я не совсем понимаю ваш вопрос, но я почти уверен, что вы ищете @OnLoad @OnSave аннотации and . Вы добавляете их в методы в своих классах сущностей, и эти методы будут вызываться сразу после загрузки объекта или непосредственно перед его сохранением, соответственно. Документация для них здесь.

Редактировать:
после ваших комментариев (ниже) Теперь я понимаю, чего вы пытаетесь достичь. Да, Objectify поддерживает это (хотя я сам никогда не пробовал). Вы хотите использовать методы Saver.toEntity() and Loader.fromEntity() . Похоже, вы можете использовать их следующим образом:

 // Use Objectify to convert a POJO into an Entity
Entity filled = ofy().save().toEntity(myPojo);

// Use Objectify to convert an Entity into a POJO
Object pojoCopy = ofy().load().fromEntity(filled);
 

Комментарии:

1. Привет @Eric Simonton, ваш ответ частично отвечает: я хочу сохранить свои экземпляры объектов только через собственный API, поскольку я добавляю несколько динамических столбцов в зависимости от состояния объекта. Поэтому я хочу, чтобы Objectify заполнила экземпляр сущности обычным полем, а затем передала его мне, чтобы я мог добавлять свои собственные поля и сохранять их самостоятельно

2. Работа, которую выполняет Objectify, является ценной (экранирование * Игнорирование полей, использование *Index для распознавания индексированных полей, пропуск нулей и т. Д.). Я хочу иметь эту часть, но без всего остального (я хочу сохранять и загружать только через собственные API)

3. @ZiedHamdi О, я вижу! Извините за путаницу. Смотрите Мое редактирование выше.

4. Спасибо, Эрик, это именно то, что я искал 🙂

5. @ZiedHamdi Поскольку я никогда не использовал Objectify таким образом, я не уверен, когда / если он попадет в кеш. Я бы подумал, что вы не хотите, чтобы Objectify выполнял какое-либо кэширование, поэтому, если это так, я бы поискал способ обойти его (что, я думаю , можно сделать). Обратите внимание, что Objectify предоставляет API для использования кэша вручную , если вы тоже хотите. Кроме того, последний вопрос в их FAQ может вас заинтересовать.