#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 может вас заинтересовать.