gpt4 book ai didi

kotlin - 无法使用 Room ORM Kotlin 保存包含 List 的数据模型

转载 作者:行者123 更新时间:2023-12-04 17:07:42 26 4
gpt4 key购买 nike

我在使用 Kotlin 的 Room ORM 时遇到问题。我的任务是能够保存和获取数据模型 RouteTemplateModel,其中包含 AddressModel 类型的地址列表和包含特定路线标题的 RouteModel 类的对象。这是我的代码:

地址模型.kt

@Entity(foreignKeys = arrayOf(
ForeignKey(entity = RouteModel::class,
parentColumns = arrayOf("routeId"),
childColumns = arrayOf("parentId"))))
data class AddressModel(
@PrimaryKey(autoGenerate = true)
var addressId: Long,
var parentId: Long,
var street: String,
var house: String,
var entrance: String,
var title: String){
constructor(): this(0, 0, "", "", "", "")
}

RouteModel.kt
@Entity
data class RouteModel(
@PrimaryKey(autoGenerate = true)
var routeId: Long,
var title: String) {
constructor() : this(0, "")
}

这是我的简单模型,我在 Room 的文档中发现,为了在模型之间创建关系,我需要使用 @ForeignKey@Relation
因此,使用文档和教程中的代码示例,我创建了 RouteTemplateModel包含 RouteModel 的对象和列表 AddressModels .这是类

RouteTemplateModel
class RouteTemplateModel{

private var id: Long = 0

@Embedded
private var routeModel: RouteModel = RouteModel()

@Relation(parentColumn = "routeId", entityColumn = "parentId")
private var addressList: List<AddressModel> = listOf()

constructor()

constructor(id: Long, routeModel: RouteModel, title: String,
addressList: List<AddressModel>){
this.id = id
this.routeModel = routeModel
this.addressList = addressList
}

fun getId(): Long{
return id
}

fun getRouteModel(): RouteModel{
return routeModel
}

fun getAddressList(): List<AddressModel>{
return addressList
}

fun setId(id: Long){
this.id = id
}

fun setRouteModel(routeModel: RouteModel){
this.routeModel = routeModel
}

fun setAddressList(addressList: List<AddressModel>){
this.addressList = addressList
}

}

那么有什么问题呢?我收到这样的错误:

Error:The columns returned by the query does not have the fields [id] in com.innotech.webcab3kotlin.model.RouteTemplateModel even though they are annotated as non-null or primitive. Columns returned by the query: [routeId,title]





Error:Type of the parameter must be a class annotated with @Entity or a collection/array of it.



这是一个真正的问题,因为如果我尝试修复第一个错误并在 RouteTemplateModel 中进行注释id 变量也返回此列,我需要将类注释为实体(就像在第二个错误中一样),但是当我这样做时,我收到一个错误

Error:Entities cannot have relations.



这是 AppDatabase.kt
@Database(entities = arrayOf(RouteModel::class, AddressModel::class), version = 1)
abstract class AppDatabase : RoomDatabase() {

abstract fun getRouteDao(): RouteDao
}

RouteDao.kt
@Dao
interface RouteDao {


@Query("SELECT routeId, title FROM RouteModel")
fun getAll(): List<RouteTemplateModel>

@Insert
fun insertAll(vararg models: RouteTemplateModel)

@Delete
fun delete(model: RouteTemplateModel)


}

这真是令人困惑。请帮我)

最佳答案

您的“parentId”列只能保存 long 值,将其类型设置为“Text”,然后创建一个从“List”到 String 的 TypeConverter,反之亦然以供引用,请查看 link .

关于kotlin - 无法使用 Room ORM Kotlin 保存包含 List<Model> 的数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com