Пример Datamodel для Google App Engine с использованием JDO - PullRequest
0 голосов
/ 05 апреля 2011

Я пытался изучить и создать пример проекта с использованием GWT / GAE / GoogleDatastore.

Я просто пытаюсь выяснить, как лучше всего разработать модель данных для системы управления обучением.Допустим, традиционным образом следующие сущности .....

Пользователь
Роль

Пользовательские курсы

Курсы
Предметы
Материалы

Пользователь - один на один для роли
Курсы - один ко многим с предметами
Темы - один ко многим с материалами
Пользователи - многие ко многим с курсами, использующими UserCourses

Может ли кто-нибудь подсказать мне, как лучше всего представить это в JDO?

---> Расширение вопроса.

Спасибо, Шифти, но я полностью застрял в неизвестной модели отношений ... пытаюсь / пытаюсь выйти из традиционной реляционной модели.

Позвольте мне взять простые предметы против материалов

Пробую следующую модель,

@ PersistenceCapable (identityType = IdentityType.APPLICATION) открытый класс Предметы {

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private String id;
@Persistent
private List<Materials> materials;

}

открытый класс Материалы {

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private String id;
@Persistent
private String materialName;
@Persistent
private String author;
@Persistent
private String materialType;
@Persistent
private String url;

}
Когда я пытаюсь сначала сохранить материалы, а затем присвоить этот объект предметам, возникают проблемы.Пока я читаю, вы не можете назначить ребенка родителю, который уже существует без родителя.
Иногда возможно добавлять материалы, не назначенные для Темы, но могут быть назначены позже.

1 Ответ

0 голосов
/ 05 апреля 2011

Если вы хотите установить отношения многие-ко-многим с GAE и JDO, вам необходимо сохранить список ключей в моделях.

Модель пользователя

import java.util.Set;
import com.google.appengine.api.datastore.Key;

@PersistenceCapable
public class User {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private Set<Key> courses;
}

КурсыМодель

   import java.util.Set;
    import com.google.appengine.api.datastore.Key;

    @PersistenceCapable
    public class Courses {
        @PrimaryKey
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Key key;
        @Persistent
        private Set<Key> users;
    }

таким образом, вам не нужен класс UserCourses.

РЕДАКТИРОВАТЬ:

Если вы используете

@Persistent
private List<Materials> materials;

, вы работаете смодель отношений с собственностью.Таким образом, вы не можете сначала сохранить модель, а затем добавить ее в модель объекта и сохранить модель объекта.Просто добавьте непостоянный материал в список материалов модели объекта и сохраните модель объекта.это также сохранит материалы.

возможно, я мог бы ошибиться, но надеюсь, это поможет.

...