我正在学习带空间的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>
) {}
Homework
和Attendance
都是另一个包含各种基本类型的数据类。这是我的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相同。这里缺少一些东西。
答案 0 :(得分:1)
房间不支持对其他复杂对象的引用。 reasoning about this decision上有一篇文章。
关键点:房间不允许实体类之间的对象引用。相反,您必须明确请求应用程序所需的数据。
您所能做的就是定义一个@ForeignKey
约束,即documented here。