2016-07-07 96 views
1

我刚刚开始使用GreenRobot ORM并与数据库创建进行堆叠。我需要在两个表之间创建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"); 

,现在我想创造另一个实体Exercise_Accessories,其中包含了上面这些实体的IDS。我该怎么做?

谢谢。

回答

4

是的,你是对的,你必须创建一个中间实体,该实体持有你想链接到N:M关系的对象的id的引用。

创建一个实体,并获得ID的属性:

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

然后link the properties

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

米德更多SQL,因为这是模拟许多一对多的标准方式关系。

当然,当添加实体和附件时,这个实体行不会自动添加到数据库中。您需要手动插入它。

+0

非常感谢!还有1个问题 - 我应该在一个简单的应用程序中使用ORM,还是只使用Google API就足够了? –

+1

通过GoogleAPI你的意思是标准的Android SQLite框架?您可以但请记住,在这种情况下,所有SQL语句都必须由您编写。 GreenDao更简单,因为它可以帮助您在代码中执行此操作(而不是触及SQL),但只有标准的select或insert可以完成。例如,你只能查询整个对象而不是它们的特定属性。 –

+0

我的意思是“光标”,好的,再次感谢你。我要给ORM一个尝试:] 祝你有美好的一天。 –