Каков подходящий способ создания объектов с отношением «один ко многим» с использованием Objectify и RequestFactory?Я прочитал документацию для этих библиотек, а также рассмотрел ряд примеров проектов, таких как listwidget и gwtgae2011 .Все они используют аннотацию @Embedded
, а это не то, что я хочу, потому что она хранит все в одной сущности.В соответствии с документацией, другим вариантом будет использование свойства @Parent
в дочерних классах.В моем примере (геттеры / сеттеры удалены для простоты) у меня есть сущности Person
и Organization
, которые определены как
@Entity
public class Person extends DatastoreObject
{
private String name;
private String phoneNumber;
private String email;
@Parent private Key<Organization> organizationKey;
}
и
@Entity
public class Organization extends DatastoreObject
{
private String name;
private List<Person> contactPeople;
private String address;
}
Теперь, если я правильно понял документацию вЧтобы сохранить Организацию с одним человеком, я должен сначала сохранить Организацию, затем установить organizationKey
в ObjectifyService.factory().getKey(organization)
для объекта Персона и затем сохранить его.Мне уже не нравится, что мне приходится перебирать каждый дочерний объект вручную, но использование RequestFactory делает все более запутанным из-за наличия прокси-классов.Как определить классы Organization и OrganizationProxy - с ключом <> или без него?Должен ли я определить что-то подобное в Организации?
public void setContactPeople(List<Person> contactPeople)
{
for (int i = 0; i < contactPeople.size(); ++i)
{
DAOBase dao = new DAOBase();
Key<Organization> key = dao.ofy().put(this);
contactPeople.get(i).setOrganizationKey(key);
}
this.contactPeople = contactPeople;
}
И как мне загрузить Организацию с дочерними элементами из Datastore?Придется ли мне вручную извлекать каждого Person и заполнять Organization.contactPeople методом @PostLoad
?
Кажется, мне придется написать МНОГО кода обслуживания, чтобы сделать то, что JPA / JDO выполняет засцена.Я просто не понимаю: (
Я что-то упустил или это единственный способ реализовать это?
Большое спасибо за ответы заранее !!!