Я новичок в Objectify и пытаюсь реализовать отношения "один ко многим". У меня есть объекты Организация и объект Лицо. У организации есть @Transient
свойство Список‹ Person > contactPeople. У класса Person есть свойство @Parent
Key‹ Organization > OrganizationKey, которое я могу установить с помощью установщика.
Я хочу сохранить contactPeople в @PrePersist
обработчике Organization. Для этого мне нужно установить родительский ключ в Person.
Wiki здесь говорит: "Вы не можете обновить Поля @Id или @Parent в обратном вызове @PrePersist; к этому моменту низкоуровневый Entity уже создан с полным ключом, поэтому его можно передать как необязательный параметр."
Я не уверен, что это все еще точная информация? Потому что ключ объекта com.google.appengine.api.datastore.Entity
, который я получаю в обработчике PrePersist
, имеет ключ, который буквально говорит «пока нет идентификатора».
Как бы вы это реализовали?
Спасибо!
Обновление от 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.
@PrePersist void onPersist(Objectify ofy) { if (id == null) id = ofy.getFactory().allocateId(getClass()); }
. И оказалось, что этот выделенный идентификатор перекрывается номером, который выше, чем я выделил, что приводит меня к выводу, что Wiki устарела, а Key создается после события PrePersist. Грустный. - person expert   schedule 20.10.2011