android - 如何在 Room 数据库的同一张表中使用 @ForeignKeys?
问题描述
让我解释一下我的问题。这是我在 android studio 中的代码:
@Entity(tableName = "family_table",
foreignKeys = @ForeignKey(entity = Person.class,parentColumns = "myId",childColumns = "parentId"))
public class Person {
@PrimaryKey
private long myId;
private long parentId;
private String name;
private int age;
private String gender;
public Person( String name, int age, String gender) {
this.myId = IdGenerator.generate();
this.name = name;
this.age = age;
this.gender = gender;
}
public void setMyId(long myId) {
this.myId = myId;
}
public void setParentId(long parentId) {
this.parentId = parentId;
}
public void setName(String name) {
this.name = name;
}
public long getMyId() {
return myId;
}
public long getParentId() {
return parentId;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
}
现在我在数据库中创建了一些条目,如下所示:
我想@ForeignKeys
在同一个表中使用注释。在代码中我想parentId
用myId
列引用。但是应用程序崩溃了。有什么建议吗?
解决方案
我认为你已经以正确的方式完成了约束。Sqlite (Room) 允许使用自引用外键。
但我想你在插入第一个带有空“parentId”的父行时遇到了一个问题(你使用“0”作为空的“父ID”,但它应该设置为“null”。否则你会得到关于约束的错误违反)。
尝试将类型“Long”更改为您的“parentId”而不是“long”。这将允许为字段“parentId”设置空值。
推荐阅读
- python - 使用 Python 获取一周中两天之间的日期
- python - Pyinstaller 和显示韩文字符
- java - 线程“主”java.lang.UnsatisfiedLinkError 中的异常:java.library.path 中没有 jniopencv_highgui
- prolog - 如何在保留内部顺序的同时在 Prolog 中打乱列表
- c# - 视频未按照 videoSourcePlayer 控件呈现
- asp.net-web-api - 不能包含导航属性(为空)
- typescript - 如何使用映射类型删除索引签名
- python - Python静态图库生成器代码缩略图目录
- javascript - nodejs/selenium webdriver:无法将鼠标移动到所需位置
- php - 在 laravel 中找不到查看 [index]