使用数据插入对象 class
Insert object using data class
我正在有空间地学习 kotlin,在 db 中插入基本类型非常容易。以下是我的学生数据 class 的声明方式。
@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
都是另一个数据 class ,其中包含各种原始类型;这是我的 Homework
数据 class
@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,所以我之前在 class 学生中使用 POJO 和 ArrayList 作业和出勤不是问题,所以我期待与 Room 相同.. 看来我在这里遗漏了一些东西。
Room 不支持对其他复杂对象的引用。 reasoning about this decision.
上有一篇文章
Key takeaway: Room disallows object references between entity classes. Instead, you must explicitly request the data that your app needs.
您对空间所做的一切就是定义一个 @ForeignKey
约束,即 documented here。
我正在有空间地学习 kotlin,在 db 中插入基本类型非常容易。以下是我的学生数据 class 的声明方式。
@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
都是另一个数据 class ,其中包含各种原始类型;这是我的 Homework
数据 class
@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,所以我之前在 class 学生中使用 POJO 和 ArrayList 作业和出勤不是问题,所以我期待与 Room 相同.. 看来我在这里遗漏了一些东西。
Room 不支持对其他复杂对象的引用。 reasoning about this decision.
上有一篇文章Key takeaway: Room disallows object references between entity classes. Instead, you must explicitly request the data that your app needs.
您对空间所做的一切就是定义一个 @ForeignKey
约束,即 documented here。