Проблема с JDO в Google App Engine - PullRequest
0 голосов
/ 20 июля 2010

Как хранить сложные объекты? У меня есть объект в своем списке дочерних объектов, в дочернем объекте есть четыре списка дочерних объектов, при вызове makePersistent (person) объект не сохраняется. Помощь !!!!!!!!!!!!

Я звоню pm.makePersistent (); но списки

@Persistent
    private List<ChoosedElementEntity> choosedElements = new ArrayList<ChoosedElementEntity>();

    @Persistent
    private List<PleasantElementEntity> pleasantElements = new ArrayList<PleasantElementEntity>();

    @Persistent
    private List<UnpleasantElementEntity> unpleasantElements = new ArrayList<UnpleasantElementEntity>();

    @Persistent
    private List<SetViewElementEntity> setViewElements = new ArrayList<SetViewElementEntity>();

не сохранено !!!

пример:

@PersistenceCapable(table = "persons", identityType = IdentityType.APPLICATION)
public class PersonEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;   

    @Persistent
    private List<OfferEntity> offers = new ArrayList<OfferEntity>();
}

@PersistenceCapable(table = "offers", identityType = IdentityType.APPLICATION)
public class OfferEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;


    @Persistent
    private List<ChoosedElementEntity> choosedElements = new ArrayList<ChoosedElementEntity>();

    @Persistent
    private List<PleasantElementEntity> pleasantElements = new ArrayList<PleasantElementEntity>();

    @Persistent
    private List<UnpleasantElementEntity> unpleasantElements = new ArrayList<UnpleasantElementEntity>();

    @Persistent
    private List<SetViewElementEntity> setViewElements = new ArrayList<SetViewElementEntity>();
}


@PersistenceCapable(table = "offer_selections", identityType = IdentityType.APPLICATION)
public class ChoosedElementEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

    @Persistent
    private String code;

    @Persistent
    private Text cmComments;
}

@PersistenceCapable(table = "offer_selections", identityType = IdentityType.APPLICATION)
public class PleasantElementEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

    @Persistent
    private String code;

    @Persistent
    private Text cmComments;
}

@PersistenceCapable(table = "offer_selections", identityType = IdentityType.APPLICATION)
public class UnpleasantElementEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

    @Persistent
    private String code;

    @Persistent
    private Text cmComments;
}

Ответы [ 3 ]

2 голосов
/ 20 июля 2010
  • Убедитесь, что вы объявили все классы в иерархии объектов как @PersistenceCapable
  • Проверьте, что вы объявили список / установите переменные объекта в соответствии с документацией google ?то есть: @Element(dependent = "true") private Set tags = new HashSet();
  • Вы пытались использовать makePersistentAll(person)?
  • Проверьте, действительно ли ваши данные сохраняются, просматривая данные на http://localhost:8888/_ah/admin/
  • Вы закрываете свою сохраняемостьобработчик?то есть pm.close().Данные никогда не сохраняются, пока вы не закроете обработчик, то есть: // All objects are manupliated using a pm object PersitenceManager pm = PMF.instance().getPersistenceManager(); // do work // Store the changes pm.close()
0 голосов
/ 22 июля 2010

Похоже, что вы неправильно активировали первичные ключи генератора в JDO. Это не ошибка JDO?

Я нашел это:

"В настоящее время существует ошибка, препятствующая отношениям" один ко многим " где родитель и ребенок находятся в одном классе, что затрудняет моделировать древовидные структуры. Это будет исправлено в следующем выпуске. Вы можно обойти это, сохраняя явные значения ключа для родитель или дети. "

http://code.google.com/intl/en-EN/appengine/docs/java/datastore/usingjdo.html

Я не мог дождаться исправления, поэтому я уже работал над этим выдают все мои сущности этого типа:

  • имеющий одного и того же родителя группы сущностей (другого класса)
  • использование ArrayList <[Entity]> значений ключа для хранения "потомков" каждой сущности
  • использование значения ключа для хранения "родителя" каждой сущности (для корневого экземпляра значение NULL, даже если у него все еще есть родительская группа сущности).
0 голосов
/ 20 июля 2010

Может быть проблема в отношениях между объектами? Попробуйте сделать вручную сохранить каждый объект из сложных объектов

...