Собственные отношения в Google App Engine не работают

Я работаю над проектом Google App Engine и изо всех сил пытаюсь правильно настроить отношения в JDO. Объекты сохраняются правильно, однако связанные объекты не отображаются в средстве просмотра хранилища данных или в запросах.

Обрезанный пример моего кода:


        @PersistenceCapable
        public class Project implements Persistable {


    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

    @Persistent(defaultFetchGroup = "true")
    private Client client;

        // Extra fields and getter and setters remove

        }

        @PersistenceCapable
        public class Client implements Persistable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

Representation r = null;
        PersistenceManager pm = PMF.get().getPersistenceManager();

        try {
            XMLToObject p = new XMLToObject(new org.everglade.tempus.persistence.dataobjects.Project());
            p.parse(xml);
            org.everglade.tempus.persistence.dataobjects.Project proj = (org.everglade.tempus.persistence.dataobjects.Project) p.getObject();
            pm.makePersistent(proj);
            getResponse().setStatus(Status.SUCCESS_CREATED);
            getResponse().setLocationRef("/project/" + KeyFactory.keyToString(proj.getId()));
        } catch (Exception e) { // Add finer exception handling here so can alter status based on what went wrong!
            getResponse().setStatus(Status.SERVER_ERROR_INTERNAL);
            Log.severe("The following error occurred whilst trying to add a new project: " + e.getMessage());
        } finally {
            pm.close();
        }

Объект проекта сохраняется, однако с ним не связан клиент - кто-нибудь может понять, почему? Это мое первое приложение на движке приложений, а также с использованием JDO, так что это, вероятно, что-то очень очевидное!

Заранее спасибо!


person James Herrington    schedule 28.02.2011    source источник


Ответы (1)


Вы должны знать, что отношения владения в App Engine сильно отличаются от спецификации JDO. Отношения собственности фактически создают группу объектов, которая представляет собой граф хранилища. Подробнее здесь http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html

Поэтому в большинстве случаев в движке приложения вам лучше ссылаться на другие объекты по ключу. Если вы действительно не хотели определить граф Entity Group. В то же время я бы посоветовал вам избегать больших деревьев наследования (информация в той же справочной ссылке выше).

person maximbr    schedule 01.03.2011