【问题标题】:SQLite Foreign Key Constraint Failed (code 787) - Android RoomSQLite 外键约束失败(代码 787) - Android Room
【发布时间】:2020-01-07 14:07:28
【问题描述】:

我在 Android Room 中遇到外键问题。

我写了两个实体和道。客户实体具有addressesId 参数,它是对外键的引用。

@Entity(
    tableName = "customers", foreignKeys = [
        ForeignKey(
            entity = AddressDbModel::class,
            parentColumns = ["id"],
            childColumns = ["address_id"]
        )
    ],
    indices = [
        Index(value = ["address_id"])
    ]
)
data class CustomerDbModel(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    val customerId: Long? = null,

    @ColumnInfo(name = "name")
    val name: String,

    @ColumnInfo(name = "address_id")
    val addressId: Long? = null
)
@Entity(tableName = "addresses")
data class AddressDbModel(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    val id: Long? = null,

    @ColumnInfo(name = "street_address")
    val street: String? = null,

    @ColumnInfo(name = "city")
    val city: String,

    @ColumnInfo(name = "building_number")
    val buildingNumber: String? = null,

    @ColumnInfo(name = "flat_number")
    val flatNumber: String? = null
)
@Dao
interface AddressDao : BaseDao<AddressDbModel> {

    @Query("DELETE FROM addresses WHERE id=:address")
    fun deleteById(address: Long)
}

当我执行“deleteById”方法时,应用程序抛出异常,

FOREIGN KEY constraint failed (code 787 SQLITE_CONSTRAINT_FOREIGNKEY[787])

我该如何解决这个问题?

【问题讨论】:

    标签: android sql android-room


    【解决方案1】:

    你可以使用:-

    ForeignKey(
            entity = AddressDbModel::class,
            parentColumns = ["id"],
            childColumns = ["address_id"],
            onDelete = ForeignKey.CASCADE //<<<<<<<<<< ADDED
    )
    

    因此,如果地址被删除,则子/子(如果有)将被删除。您可能需要考虑onUpdate = ForeignKey.CASCADE(尽管这不太可能需要)。

    你不妨看看SQLite Foreign Key Support

    【讨论】:

      猜你喜欢
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多