如何解决如何使用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 举报,一经查实,本站将立刻删除。