2011-04-04 7 views
0

GWT/GAE/GoogleDatastoreを使用してサンプルプロジェクトを学習し、作成しようとしています。JDOを使用したGoogleアプリケーションエンジン用のDatamodelサンプル

学習管理システムのデータモデルを設計する最善の方法を理解しようとしています。

ユーザー
役割

UserCourses

コース
科目
材料

ユーザーが一から一です.....さんは、伝統的な方法で、次の実体であるとしましょう役割へ
科目は科目と1対多である
人の被験者は、マテリアル
ユーザーに多くの1つである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; 

}

を試す材料

アム対簡単な科目を見てみましょう

public class 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; 


最初に資料を保存してから、その資料を科目に割り当てようとすると問題が発生します。私が読んでいるように、親なしで永続化されている親に子を割り当てることはできません。
Subjectに割り当てられていないマテリアルを追加することは可能ですが、後で割り当てることができます。

答えて

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

関連する問題