代码之家  ›  专栏  ›  技术社区  ›  Tartar

Android领域:多对多关系

  •  2
  • Tartar  · 技术社区  · 6 年前

    我试图通过实现一个简单的Android项目来学习Realm的基本知识。 其思想是用户有多个项和多个项列表,一个项可以添加到这些列表中的任何一个,一个列表可以有多个项。因此,在 Item List 物体。这是我的东西。

    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 根据给定列表中项目的状态,可能会有所不同。但当我更新列表中的此字段时,添加到不同列表中的所有其他项也会更新。因为他们使用的是同一个对象,这是有意义的,但这不是我想要的行为。有没有一种领域方法来创建一个带有额外列/字段的透视表/对象(在这种情况下 isDone公司 ) ?

    任何帮助都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  0
  •   EpicPandaForce    6 年前

    问题是 isDone 财产 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 只核对 id )