Android领域:多对多关系

时间:2018-07-15 12:21:54

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

我正在尝试通过实现一个简单的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)的数据透视表/对象?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题在于isDone的{​​{1}}属性并不真正属于Item。如果您可以在多个列表中设置相同的项,则在给定列表中将给定任务视为完成的属性就是列表的属性。

Item

然后,如果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进行检查)就知道它是否是完成的项目

相关问题