2011-04-04 2 views
0

Я пытался изучить и создать образец проекта с использованием GWT/GAE/GoogleDatastore.Пример Datamodel для движка Google для использования с использованием JDO

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

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

UserCourses

Курсы
Субъекты
Материалы

Пользователь один к одному к роли
Курсы являются одними для многих с предметами
Субъекты является один ко многим с Materials
пользователей Многие ко многим с использованием курсов UserCourses

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

---> Продление вопроса.

Благодарю вас, Shifty, но я полностью застрял с моделью отношений с неработающими ... пытается/пытается выйти из традиционной реляционной модели.

Позвольте мне простые Субъекты против Материалы

Am попробовать следующую модель,

@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; 

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

ответ

0

Если вы хотите установить отношения «многие ко многим» с 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.

EDIT:

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

@Persistent 
private List<Materials> materials; 

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

Возможно, я мог поставить вопрос неправильно, но я надеюсь, что это поможет.

+0

Добавили более подробную информацию о моей проблеме в нижней части вопроса. не мог добавить его в комментарий из-за отсутствия. предел слова. – Thiru

+0

Я обновил свой ответ – superbly

+0

Спасибо, позвольте мне попробовать. Не уверен, верну ли я предметы (Материалы внутри Субъектов). – Thiru

Смежные вопросы