Можно ли сохранить дочерние объекты в обработчике @PrePersist родительского класса? (Объективи 3.1б1) - PullRequest
0 голосов
/ 20 октября 2011

Я новичок в Objectify и пытаюсь реализовать отношения один-ко-многим.У меня есть субъекты Организация и субъект Персона .Организация имеет @Transient свойство Список contactPeople .Класс Person имеет @Parent свойство Ключ organizationKey , который я могу установить с помощью установщика.

Я бы хотел сохранить contactPeople в @PrePersist обработчикеОрганизация.Для этого мне нужно установить родительский ключ в Person.

Wiki здесь говорит: "Вы не можете обновить поля @Id или @Parent в обратном вызове @PrePersist; к этому времени низкоуровневый объект уже был создан с полным ключом, поэтому его можно передавать как необязательный параметр. "

Я не уверен, что это все еще точная информация?Потому что ключ com.google.appengine.api.datastore.Entity объекта, который я получаю в обработчике PrePersist, имеет ключ, который буквально говорит "нет-id-пока".

Как бы вы это реализовали?

Спасибо!

Обновление от 17 ноября 2011 года:

В новом Objectify4 мы сможем создавать полуавтоматические отношения, подобные этим:

class Beastie {
   @Parent
   @Load
   ParentThing parent;

   @Id Long id;

   @Load({"bigGroup", "smallGroup"})
   SomeThing some;

   @Load("bigGroup")
   List<OtherThing> others;

   @Load
   Ref<OtherThing> refToOtherThing;

   Ref<OtherThing> anotherRef;  // this one is never fetched automatically
}

Здесь находится в стадии разработки проектной документации новой версии.

Это большие новости. Twig Автор, Джон Паттерсон, присоединился к проекту Objectify сегодня.

1 Ответ

1 голос
/ 20 октября 2011

Хм, кажется, вам нужно создать Дао перед вашими моделями данных. Итак, вы сможете сделать что-то вроде:

Organization organization = ...
List<Person> people = ...
ob.put(organization)
for (Person person: people) {
    person.organizationKey = organization.getKey();
    ob.put(person);
    organization.contactPeopleKeys.add(person.getKey());
}
ob.put(organization)

GAE + Objectify требует много вещей для обработки вашим собственным кодом, так что это обычное дело

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...