使用数据类插入对象

时间:2018-07-27 17:24:58

标签: kotlin android-room

我正在学习带空间的kotlin,在db中插入基本类型非常容易。这是我的学生数据类的声明方式。

@Entity(tableName = "student")
data class Student(@PrimaryKey(autoGenerate = true) var id: Long = 0,
                   @ColumnInfo(name="studentID") var studentID: Long = 0,
                   @ColumnInfo(name="schoolID") var schoolID: Long = 0,
                   @ColumnInfo(name="guardianID") var guardianID: String = "",
                   @ColumnInfo(name="matrixNumber") var matrixNumber: String = "",                   
                   @ColumnInfo(name="name") var name: String = "",
                   @ColumnInfo(name="homework") var homework: ArrayList<Homework>,
                   @ColumnInfo(name="attendance") var attendance: ArrayList<Attendance>
                       ) {}

HomeworkAttendance都是另一个包含各种基本类型的数据类。这是我的Homework数据类

@Entity(tableName = "homework")
data class Homework(@PrimaryKey(autoGenerate = true) var id: Long = 0,
                    @ColumnInfo(name="subject") var subject: String,
                    @ColumnInfo(name="teacher") var teacher: String,
                    @ColumnInfo(name="submissionDate") var submissionDate: String = "",
                       ) {
}

我将在作业和出勤方面收到此编译错误

Cannot figure out how to save this field into database. You can consider adding a type converter for it.

如果重要的话,上面的所有数据都将使用改型进行检索。我在某处阅读了需要使用TypedConverter的内容吗?但是我还不清楚。

顺便说一句,我来自使用Java和SQLiteHelper,所以以前在类Student中将POJO与ArrayList家庭作业和出勤一起使用对我来说不是问题,所以我期望与Room相同。这里缺少一些东西。

1 个答案:

答案 0 :(得分:1)

房间不支持对其他复杂对象的引用。 reasoning about this decision上有一篇文章。

  

关键点:房间不允许实体类之间的对象引用。相反,您必须明确请求应用程序所需的数据。

您所能做的就是定义一个@ForeignKey约束,即documented here