Как вставить дочерние объекты в JDO (Google App Engine)? - PullRequest
2 голосов
/ 11 июня 2010

Как добавить запись в дочернюю сущность в приведенном ниже примере?Например, у меня есть запись сотрудника, которая называется «Сэм».Как мне добавить 2 улицы для Сэма?

Думаю, у меня есть

Родительский объект - Сотрудник

import java.util.List;

// ...
@Persistent(mappedBy = "employee")
private List<ContactInfo> contactInfoSets;

Дочерний ключ - Адрес

import com.google.appengine.api.datastore.Key;
// ... imports ...

@PersistenceCapable
public class ContactInfo {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private String streetAddress;

    // ...
}

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

Это просто работает:

Employee sam = new Employee("Sam");
List<Address> addresses = new ArrayList<Address>();
addresses.add(new Address("Foo St. 1"));
addresses.add(new Address("Bar Bvd. 3"));
sam.setAddresses(addresses);
persistenceManager.makePersistent(sam);

Сотрудник:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class Employee {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    private List<Address> addresses;
    ...
}

Адрес:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class Address {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    ...
}

Используйте @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true") в качестве аннотации на уровне класса. Обычно вам не нужно аннотировать любые другие поля, кроме ключа, поэтому @Persistent(mappedBy = "employee") на List не требуется.

Btw. Я предлагаю использовать параметризованные коллекции.

0 голосов
/ 14 апреля 2014

Вставка и извлечение дочерних записей может быть выполнено следующим образом:

Родительский класс Person

@PersistenceCapable(identityType=IdentityType.APPLICATION,detachable = "true")
public class Person {
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
Long id ;
@Persistent
String strName;
@Persistent
String phnNumber;
@Persistent
String strEmail;
@Nullable
@Persistent(defaultFetchGroup="true")
@Element(dependent="true")
//When adding Person Contacts would be added as it is dependent. Also while retrieving
// add defaultFetchGroup = true to retrieve child elements along with parent object.
List<Contacts> lstContacts;

// getter and setter methods

}

Зависимый дочерний класс: контакты

@PersistenceCapable(identityType=IdentityType.APPLICATION,detachable = "true")
public class Contacts 
{
@PrimaryKey  
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
Key id;
@Persistent
String email;
@Persistent
String phNumber;
   //getter and setter methods
  }
...