【问题标题】:GreenDao. N:M relation绿道。 N:M 关系
【发布时间】:2016-07-07 08:33:42
【问题描述】:

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

所以,假设我有 2 个实体:ExerciseAccessories。它们看起来像:

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。我该怎么做?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    是的,你是对的,你必须创建一个中间实体来保存对你想在 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,因为这是建模多对多关系的标准方法。

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

    【讨论】:

    • 非常感谢!还有 1 个问题 - 我应该在一个简单的应用程序中使用 ORM 还是只使用 Google API 就足够了?
    • GoogleAPI 是指标准的 Android SQLite 框架?您可以,但请记住,在这种情况下,所有 SQL 语句都必须由您编写。 GreenDao 更简单,因为它可以帮助您在代码中执行此操作(不涉及 SQL),但是只能完成标准选择或插入。例如,您只能查询整个对象而不是它们的特定属性。
    • 我的意思是“光标”,好的,再次感谢您。我要试试 ORM :] 祝你有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 2011-09-15
    • 2019-03-16
    • 2017-08-28
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多