Обнуляемый внешний ключ на номер - PullRequest
0 голосов
/ 07 июня 2019

Я бы знал, возможно ли создать пустую ссылку на внешний ключ с номером.

Пока моя структура базы данных выглядит так:

@Entity(tableName = "A")
class A {
    @PrimaryKey(autoGenerate = true)
    public long id;
}

@Entity(tableName = "B")
class B{
    @PrimaryKey(autoGenerate = true)
    public long id;
}

@Entity(tableName = "C", foreignKeys = {@ForeignKey(entity = A.class, parentColumns = "id", childColumns = "foreign_id_a"), @ForeignKey(entity = B.class, parentColumns = "id", childColumns = "foreign_id_b")})
class C{
    public long id;
    public long foreign_id_a;
    public long foreign_id_b;   
}

Я хотел бы иметь возможность вставлять следующие объекты:

C(id=1, foreign_id_a=1, foreign_id_b=1)
C(id=1, foreign_id_a=null, foreign_id_b=1)
C(id=1, foreign_id_a=1, foreign_id_b=null)

Но предыдущая вставка с нулевым значением выдает эту ошибку: Сбой ограничения FOREIGN KEY (код Sqlite 787 SQLITE_CONSTRAINT_FOREIGNKEY)

Есть ли способ сделать это возможным?

1 Ответ

1 голос
/ 07 июня 2019

Да, просто измените типы внешних ключей с long на Long.

В Java тип long не может быть null, поэтому Room генерирует этот столбец как NOT NULL. Кроме того, в классе C не указан @PrimaryKey.

@Entity(tableName = "C", foreignKeys = {@ForeignKey(entity = A.class, parentColumns = "id", childColumns = "foreign_id_a"), @ForeignKey(entity = B.class, parentColumns = "id", childColumns = "foreign_id_b")})
class C{
    @PrimaryKey
    public long id;
    public Long foreign_id_a;
    public Long foreign_id_b;   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...