无法使用Room ORM Kotlin保存包含List <Model>的数据模型

我在Kotlin的Room ORM上遇到了一个问题。 我的任务是有能力保存和获取数据模型RouteTemplateModel,它包含AddressModel类型的地址列表和包含特定路由标题的RouteModel类的对象。 这是我的代码:

AddressModel.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, "") } 

这里是我的简单模型,我在房间的文档中发现,为了创建模型之间的关系,我需要使用@ForeignKey@Relation

因此,在doc和tutorials中的代码示例中,我创建了包含RouteModel对象和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 } } 

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

错误:查询返回的列在com.innotech.webcab3kotlin.model.RouteTemplateModel中没有字段[id],即使它们注释为非null或原始类型。 查询返回的列:[routeId,title]

错误:参数的类型必须是用@Entity或其集合/数组注解的类。

这是一个真正的问题,因为如果我尝试修复第一个错误并在RouteTemplateModel id变量中注释以返回此列,则需要将类注解为Entity(如第二个错误),但是当我这样做时出现错误

错误:实体不能有关系。

这是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) } 

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