GreenDao。 N:M关系

时间:2016-07-07 08:33:42

标签: android database orm many-to-many greendao

我刚刚开始使用GreenRobot ORM并堆叠数据库创建。我需要在两个表之间创建N:M关系。官方文件。说他们仍然不支持N:M,所以我必须自己实现这个。

所以,我们假设我有两个实体:练习配件。他们看起来像:

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 ,其中包含上述这些实体的ID。我该怎么办?

谢谢。

1 个答案:

答案 0 :(得分: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的信息,因为这是建立多对多关系的标准方法。

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