Room Kotlin 找不到 setter 字段
Room Kotlin Cannot find setter for field
您好,我正在尝试在基于 MVP
的项目中将 Room 与 Kotlin
一起使用。
我的问题是,当我创建一个数据 class 和相关的 DAO
时,所有 classes 都会成功生成,但是当我创建第二个数据 class 和它是 DAO
Error:Cannot find setter for field.
在 android studio
中的重建命令中抛出的
@Entity(tableName = "TB_CLASSES")
class TbClass(
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int =-1,
@ColumnInfo(name = "NAME") var name: String="",
@ColumnInfo(name = "CAPTION") var caption: String="",
@ColumnInfo(name = "TYPE") var type: String="")
@Entity(tableName = "TB_FEATURE_DISA")
class TbFeatureDisa(
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int=-1,
@ColumnInfo(name = "FEATURE_ID") var featureId: Int=-1,
@ColumnInfo(name = "DISA_ID") var disaId: Int=-1,
@ColumnInfo(name = "IS_SOLVED") var isSolved: Int=-1,
@ColumnInfo(name = "DISA_LEVEL") var disaLevel: Double=-0.1,
@ColumnInfo(name = "RESOLVER_USER_NAME") var resolverUserName: String="",
@ColumnInfo(name = "RESOLVE_TIME") var resolveTime: Date? =null,
@ColumnInfo(name = "REPORT_VIST_ID") var reportVisitId: Int=-1,
@ColumnInfo(name = "REPORT_FAULT_ID") var reportFaultId: Int=-1,
@ColumnInfo(name = "SOLVE_VIST_ID") var solveVisitId: Int=-1,
@ColumnInfo(name = "SOLVE_SERVICE_ID") var solveServiceId: Int=-1,
@ColumnInfo(name = "SOLVE_FUALT_ID") var solveFaultId: Int=-1)
我也检查过这个 and this 但其中 none 对我有用
创建一个 data class
,它将为
中的属性提供 setters
和 getters
@Entity(tableName = "TB_CLASSES")
data class TbClass( //< add data prior to class
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int =-1,
@ColumnInfo(name = "NAME") var name: String="",
@ColumnInfo(name = "CAPTION") var caption: String="",
@ColumnInfo(name = "TYPE") var type: String="")
TbFeatureDisa
@Entity(tableName = "TB_FEATURE_DISA")
data class TbFeatureDisa(
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int=-1,
@ColumnInfo(name = "FEATURE_ID") var featureId: Int=-1,
@ColumnInfo(name = "DISA_ID") var disaId: Int=-1,
@ColumnInfo(name = "IS_SOLVED") var isSolved: Int=-1,
@ColumnInfo(name = "DISA_LEVEL") var disaLevel: Double=-0.1,
@ColumnInfo(name = "RESOLVER_USER_NAME") var resolverUserName: String="",
@ColumnInfo(name = "RESOLVE_TIME") var resolveTime: Date? =null,
@ColumnInfo(name = "REPORT_VIST_ID") var reportVisitId: Int=-1,
@ColumnInfo(name = "REPORT_FAULT_ID") var reportFaultId: Int=-1,
@ColumnInfo(name = "SOLVE_VIST_ID") var solveVisitId: Int=-1,
@ColumnInfo(name = "SOLVE_SERVICE_ID") var solveServiceId: Int=-1,
@ColumnInfo(name = "SOLVE_FUALT_ID") var solveFaultId: Int=-1)
我终于找到了解决办法。问题与 属性 命名有关。
编译时出现以下错误:
@ColumnInfo(name = "IS_SOLVED") var isSolved
但是当我把上面的改成下面的时候,错误就解决了:
@ColumnInfo(name = "IS_SOLVED") var solved
我们不能使用 SQLite 保留关键字 line 来命名字段。
我使用的是 Room 版本 1.0.0 和 kotlin 版本 1.1.51。
对于像我这样缺乏关注并通过 Google 偶然发现的人,使用 val
而不是 var
会给出相同的错误消息。
您好,我正在尝试在基于 MVP
的项目中将 Room 与 Kotlin
一起使用。
我的问题是,当我创建一个数据 class 和相关的 DAO
时,所有 classes 都会成功生成,但是当我创建第二个数据 class 和它是 DAO
Error:Cannot find setter for field.
在 android studio
@Entity(tableName = "TB_CLASSES")
class TbClass(
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int =-1,
@ColumnInfo(name = "NAME") var name: String="",
@ColumnInfo(name = "CAPTION") var caption: String="",
@ColumnInfo(name = "TYPE") var type: String="")
@Entity(tableName = "TB_FEATURE_DISA")
class TbFeatureDisa(
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int=-1,
@ColumnInfo(name = "FEATURE_ID") var featureId: Int=-1,
@ColumnInfo(name = "DISA_ID") var disaId: Int=-1,
@ColumnInfo(name = "IS_SOLVED") var isSolved: Int=-1,
@ColumnInfo(name = "DISA_LEVEL") var disaLevel: Double=-0.1,
@ColumnInfo(name = "RESOLVER_USER_NAME") var resolverUserName: String="",
@ColumnInfo(name = "RESOLVE_TIME") var resolveTime: Date? =null,
@ColumnInfo(name = "REPORT_VIST_ID") var reportVisitId: Int=-1,
@ColumnInfo(name = "REPORT_FAULT_ID") var reportFaultId: Int=-1,
@ColumnInfo(name = "SOLVE_VIST_ID") var solveVisitId: Int=-1,
@ColumnInfo(name = "SOLVE_SERVICE_ID") var solveServiceId: Int=-1,
@ColumnInfo(name = "SOLVE_FUALT_ID") var solveFaultId: Int=-1)
我也检查过这个
创建一个 data class
,它将为
setters
和 getters
@Entity(tableName = "TB_CLASSES")
data class TbClass( //< add data prior to class
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int =-1,
@ColumnInfo(name = "NAME") var name: String="",
@ColumnInfo(name = "CAPTION") var caption: String="",
@ColumnInfo(name = "TYPE") var type: String="")
TbFeatureDisa
@Entity(tableName = "TB_FEATURE_DISA")
data class TbFeatureDisa(
@ColumnInfo(name = "ID")
@PrimaryKey(autoGenerate = true) var id: Int=-1,
@ColumnInfo(name = "FEATURE_ID") var featureId: Int=-1,
@ColumnInfo(name = "DISA_ID") var disaId: Int=-1,
@ColumnInfo(name = "IS_SOLVED") var isSolved: Int=-1,
@ColumnInfo(name = "DISA_LEVEL") var disaLevel: Double=-0.1,
@ColumnInfo(name = "RESOLVER_USER_NAME") var resolverUserName: String="",
@ColumnInfo(name = "RESOLVE_TIME") var resolveTime: Date? =null,
@ColumnInfo(name = "REPORT_VIST_ID") var reportVisitId: Int=-1,
@ColumnInfo(name = "REPORT_FAULT_ID") var reportFaultId: Int=-1,
@ColumnInfo(name = "SOLVE_VIST_ID") var solveVisitId: Int=-1,
@ColumnInfo(name = "SOLVE_SERVICE_ID") var solveServiceId: Int=-1,
@ColumnInfo(name = "SOLVE_FUALT_ID") var solveFaultId: Int=-1)
我终于找到了解决办法。问题与 属性 命名有关。
编译时出现以下错误:
@ColumnInfo(name = "IS_SOLVED") var isSolved
但是当我把上面的改成下面的时候,错误就解决了:
@ColumnInfo(name = "IS_SOLVED") var solved
我们不能使用 SQLite 保留关键字 line 来命名字段。 我使用的是 Room 版本 1.0.0 和 kotlin 版本 1.1.51。
对于像我这样缺乏关注并通过 Google 偶然发现的人,使用 val
而不是 var
会给出相同的错误消息。