Как удалить дочернюю сущность после удаления родительской сущности в базе данных Room? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть два класса

@Entity
data class User(
    @PrimaryKey(autoGenerate = true) var uid: Int = 0,
    var name: String?
)

@Entity
data class Note(
    @PrimaryKey(autoGenerate = true) var nid: Int = 0,
    var title: String,
    var description: String?,
    var authorId: Int
)

Между User и Note существовала связь один ко многим:

data class UserWithNotes(
    @Embedded val user: User,
    @Relation(parentColumn = "uid", entityColumn = "authorId")
    var notes: List<Note>
)

По умолчанию, если я удаляю User поле authorId в Note будет установлено на ноль. Как я могу удалить все Note после удаления User?

1 Ответ

0 голосов
/ 24 марта 2020

Сделайте authorId переменную в Note как ForeignKey, либо аннотируя переменную с аннотацией ForeignKey, либо устанавливая переменную foreignKey в Entity аннотации.

@Entity(
   foreignKeys = [
        ForeignKey(
            entity = User::class,
            parentColumns = ["uid"],
            childColumns = ["authorId"],
            onDelete = ForeignKey.CASCADE
        )
    ]
)
data class Note(
    @PrimaryKey(autoGenerate = true) var nid: Int = 0,
    var title: String,
    var description: String?,
    var authorId: Int
)

см. Эту ссылку для лучшей понимание: Room-ForeignKey

...