我正在尝试通过实现一个简单的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
字段可能会有所不同,具体取决于给定列表中项目的状态。但是,当我更新列表中的该字段时,添加到不同列表中的所有其他项目也将更新。由于他们使用的是同一个对象,这很有意义,但这与我想要的行为无关。是否存在一种Realm方法来创建具有额外列/字段(在这种情况下为isDone
)的数据透视表/对象?
任何帮助将不胜感激。
答案 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
进行检查)就知道它是否是完成的项目