代码之家  ›  专栏  ›  技术社区  ›  imin

使用数据类插入对象

  •  0
  • imin  · 技术社区  · 7 年前

    我正在学习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>
                           ) {}
    

    Homework Attendance 都是另一个包含各种基本类型的数据类;下面是 作业 数据类

    @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.
    

    如果重要的话,上面的所有数据都将通过改造来检索我在某个地方读到我需要用打字机的是吗?但我还不太清楚。

    顺便说一句,我是从使用Java和SQLiteHelper开始的,所以以前使用POJO和ArrayList家庭作业以及课堂学生出勤对我来说都不是问题,所以我对Room的期望也是一样的。。我好像少了点什么。

    1 回复  |  直到 7 年前
        1
  •  1
  •   pvorb    7 年前

    文件室不支持对其他复杂对象的引用。有一篇关于 reasoning about this decision .

    关键外卖: Room不允许实体类之间的对象引用。相反,您必须显式请求应用程序所需的数据。

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

    推荐文章