微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Room with Java管理外键

如何解决如何使用Room with Java管理外键

Room 和全新 Jetpack 应用架构的全新体验。

我有一个包含两个规范化表的数据库:项目和类别。我为两者创建了单独的类:Item (PK = "rowid") 引用了 Category (PK = "catid") 中的主键。

我的 sqlite 语句是:

创建表“项目”( “RowId”整数非空, “CatId”整数非空, “项目名称”文本不为空, FOREIGN KEY("CatId") REFERENCES "CATEGORIES"("CategoryId") ON UPDATE CASCADE ON DELETE CASCADE,PRIMARY KEY("RowId" AUTOINCREMENT) );

如何使用 Room 在 Item 中定义外键语句?我试过了:

@Entity(foreignKeys = @ForeignKey(entity = Item.class,parentColumns = "rowid",childColumns ="catid"))

并得到错误:@entity 不适用于字段。

只是寻找正确的语句语法和任何其他适用的东西(导入、变量等)。

谢谢。

解决方法

试试这个,这应该可以解决问题

@Entity(tableName = "Categories")
internal class Categories {
    @PrimaryKey
    @ColumnInfo(name = "CategoryId")
    var categoryId = 0
}

@Entity(
    tableName = "Items",foreignKeys = [ForeignKey(
        entity = Categories::class,parentColumns = ["CategoryId"],childColumns = ["CatID"],onDelete = ForeignKey.CASCADE,onUpdate = ForeignKey.CASCADE
    )]
)
internal class Items {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "RowId")
    var rowid = 0

    @ColumnInfo(name = "CatID")
    var catId = 0
}

这是room生成的SQL语句

CREATE TABLE IF NOT EXISTS `Items` (`RowId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,`CatID` INTEGER NOT NULL,FOREIGN KEY(`CatID`) REFERENCES `Categories`(`CategoryId`) ON UPDATE CASCADE ON DELETE CASCADE )

我确实注意到您的问题中存在一些不一致的地方,但是您可以使用上面的代码并更改您想用作外键列的内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。