【发布时间】:2020-05-05 14:17:15
【问题描述】:
让我解释一下我的问题。这是我在 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 注释。在代码中,我想用myId 列引用parentId。但是应用程序崩溃了。有什么建议吗?
【问题讨论】:
-
我相信 ForeignKey 旨在提供任何关系数据库中两个表中的数据之间的链接。所以我不认为你可以为一张桌子做这个。您能否更具体地说明您想要这个的原因?
-
我在 youtube 视频中看到建议可以使用外键来引用同一个表。我要制作一个家庭等级应用程序。其中每个条目都是 Person.class 的对象。每个人都有一个 ID(主键)和一个 parentId。父 ID 引用到其他人的 ID。因为我数据库中的每个条目都是 Person.class 的对象。所以只创建一个表(我命名为family_table)是合理的。但我找不到在同一张表中使用引用的任何方法。你能给我什么建议吗?
-
好吧,这是有道理的。崩溃的原因是什么?日志猫说什么?
-
我用的是long而不是Long。现在它可以工作了(见答案)。顺便说一句,Logcat 说:
Caused by: android.database.sqlite.SQLiteConstraintException: FOREIGN KEY constraint failed (code 787 SQLITE_CONSTRAINT_FOREIGNKEY)。感谢您的帮助
标签: android database sqlite android-studio android-room