Как я могу использовать @ForeignKeys в той же таблице в базе данных Room? - PullRequest
0 голосов
/ 05 мая 2020

Позвольте мне объяснить свою проблему. Вот мой код в студии android:

@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;
    }
}

Теперь я создал следующую запись в базе данных:

enter image description here

Я хочу использовать аннотацию @ForeignKeys в той же таблице. Как и в коде, я хочу сослаться на parentId со столбцом myId. Но приложение вылетело. Есть предложения?

1 Ответ

1 голос
/ 06 мая 2020

Думаю, вы сделали ограничение правильно. Sqlite (Room) позволяет использовать внешний ключ с обратной ссылкой.

Но я полагаю, вы столкнулись с проблемой при вставке первых родительских строк с пустым «parentId» (вы используете «0» для пустого «родительского идентификатора», но вместо этого следует установить значение «null». В противном случае вы выдает ошибку о нарушении ограничений).

Попробуйте изменить тип «Long» на свой «parentId» вместо «long». Это позволит установить нулевые значения в поле parentId.

...