首页 > 解决方案 > 如何在 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在同一个表中使用注释。在代码中我想parentIdmyId列引用。但是应用程序崩溃了。有什么建议吗?

标签: androiddatabasesqliteandroid-studioandroid-room

解决方案


我认为你已经以正确的方式完成了约束。Sqlite (Room) 允许使用自引用外键。

但我想你在插入第一个带有空“parentId”的父行时遇到了一个问题(你使用“0”作为空的“父ID”,但它应该设置为“null”。否则你会得到关于约束的错误违反)。

尝试将类型“Long”更改为您的“parentId”而不是“long”。这将允许为字段“parentId”设置空值。


推荐阅读