【问题标题】:Realm for Android: Many to Many RelationshipRealm for Android:多对多关系
【发布时间】:2018-07-15 12:21:54
【问题描述】:

我正在尝试通过实现一个简单的 Android 项目来学习 Realm 基础知识。 这个想法是用户有几个项目和几个项目列表,一个项目可以添加到这些列表中的任何一个,一个列表可以有很多项目。因此,ItemList 对象之间存在多对多关系。这是我的对象。

public class Item extends RealmObject {

    @PrimaryKey
    private String id;
    private String name;
    private boolean isDone;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isDone() {
        return isDone;
    }

    public void setDone(boolean done) {
        isCollected = done;
    }
}

public class List extends RealmObject {

    @PrimaryKey
    private String id;
    private String name;
    private RealmList<Item> items;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public RealmList<Item> getItems() {
        return items;
    }

    public void setItems(RealmList<Item> items) {
        this.items = items;
    }
}

我的问题是,isDone 字段可能会有所不同,具体取决于给定列表中项目的状态。但是,当我在列表中更新此字段时,添加到不同列表中的所有其他项目也会更新。因为他们使用的是同一个对象,所以这是有道理的,但这不是我想要的行为。是否有一种 Realm 方法可以创建带有额外列/字段的数据透视表/对象(在这种情况下为 isDone)?

任何帮助将不胜感激。

【问题讨论】:

  • But when I update this field in a list, all the other items added to different lists get updated too. 什么意思?显示代码
  • 假设有一个 Item 对象,我在不同的列表中使用它。当我更改此对象的 isDone 字段时,它也会在其他列表中更改。

标签: java android realm many-to-many object-oriented-database


【解决方案1】:

问题在于ItemisDone 属性并不真正属于Item。如果您可以在多个 List 中设置相同的 Item,那么在给定 List 中将给定任务视为完成的属性就是 List 的属性。

public class Item extends RealmObject {

    @PrimaryKey
    private String id;
    private String name;
    //private boolean isDone;

    @LinkingObjects("completedItems")
    private final RealmResults<List> tasksCompletedIn = null;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //public boolean isDone() {
    //    return isDone;
    //}

    //public void setDone(boolean done) {
    //    isDone = done;
    //}
}

public class List extends RealmObject {

    @PrimaryKey
    private String id;
    private String name;
    private RealmList<Item> items;
    private RealmList<Item> completedItems;

如果completedItems.contains(item)(其中item 是托管对象,或者覆盖equals 以仅检查id),那么您知道它是否是已完成的项目

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-08-20
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多