2016-07-07 3 views
1

私はGreenRobot ORMの使用を開始し、DB作成を積み重ねました。私は2つのテーブルの間にN:M関係を作成する必要があります。公式文書。彼らはまだN:Mをサポートしていないと言っているので、私はこれを自分で実装する必要があります。 運動アクセサリーGreenDao。 N:M関係

だから、私は2つの実体を持って想像することができます。彼らは、次のようになります。

Entity accessories = schema.addEntity("Accessories"); 
     accessories.addIdProperty(); 
     accessories.addStringProperty("name").unique().notNull(); 
     accessories.addStringProperty("desc"); 
Entity exercise = schema.addEntity("Exercise"); 
     exercise.addIdProperty(); 
     exercise.addStringProperty("name"); 
     exercise.addStringProperty("desc"); 
     exercise.addByteProperty("level"); 

そして今、私は上記のこれらのエンティティのIDを含む別のエンティティExercise_Accessoriesを、作成したいです。どうしたらいいですか?

ありがとうございます。

答えて

4

はい、N:M関係でリンクするオブジェクトのIDへの参照を保持する中間エンティティを作成する必要があります。これは、多対多をモデル化するための標準的な方法であるとして

accessories.addToMany(exerciseAccesories, accessoryId).setName("accessoryRef"); 
exercise.addToMany(exerciseAccesories, exerciseId).setName("exerciseRef"); 

ミード以上についてSQLを:

Entity exerciseAccesories = schema.addEntity("ExercisesAccesories") 
exerciseAccesories.addIdProperty(); 
Property exerciseId = exerciseAccesories.addLongProperty("exercise").getProperty(); 
Property accessoryId = exerciseAccesories.addLongProperty("accessory").getProperty(); 

そしてlink the properties

IDのプロパティをエンティティを作成してもらいます関係。

もちろん、このエンティティ行はエンティティとアクセサリを追加するときに自動的にデータベースに追加されません。手動で挿入する必要があります。

+0

ありがとうございました!ちょうどもう1つの質問 - 単純なアプリケーションでORMを使用するか、Google APIを使用するだけで十分でしょうか? –

+1

GoogleAPIでは標準のAndroid SQLiteフレームワークを意味しますか?このような場合には、すべてのSQLステートメントを記述する必要がありますが、覚えておいてください。 GreenDaoは、(SQLに触れることなく)コードでそれを行うのに役立ちますが、より簡単ですが、標準のselectまたはinsertだけが実行できます。たとえば、特定のプロパティではなくオブジェクト全体のみを照会することができます。 –

+0

私は "Cursor"を意味しました、ありがとう、もう一度ありがとうございます。私はORMに試してみよう:] 良い一日を。 –