Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Room在多个表中插入嵌套对象_Android_Database_Sqlite_Android Room - Fatal编程技术网

Android 使用Room在多个表中插入嵌套对象

Android 使用Room在多个表中插入嵌套对象,android,database,sqlite,android-room,Android,Database,Sqlite,Android Room,我有一个类似于以下格式的Json: { "gender": "male", "name": { "first": "Axel", "last": "Raab" } } 我想创建两个表,比如Person和Name,并将这些数据存储在这两个表中。 我的实体类如下所示: @Entity data

我有一个类似于以下格式的Json:

{
      "gender": "male",
      "name": {
        "first": "Axel",
        "last": "Raab"
      }
}
我想创建两个表,比如Person和Name,并将这些数据存储在这两个表中。 我的实体类如下所示:

@Entity
data class Person(
    @PrimaryKey(autoGenerate = true)
    var pid: Int,

    @SerializedName("gender")
    var gender: String?,

    @SerializedName("name")
    @Ignore
    var name: Name?,
) 

@Entity(indices = [Index("pId")],
    foreignKeys = [ForeignKey(
        entity = Person::class,
        parentColumns = ["pid"],
        childColumns = ["pId"],
        onDelete = ForeignKey.CASCADE)])
data class Name(
    @PrimaryKey(autoGenerate = true)
    val mId: Int,

    @SerializedName("first")
    var first: String?,

    @SerializedName("last")
    var last: String?,

    var pId: Int
) 
我已经创建了相应的DAO,但无法确定如何编写一个事务,将此数据存储到两个表中,然后使用提供的ID进行关联。 我已经经历了许多使用@Embedded或@Relation或TypeConverter方法的解决方案,但要么它们不适合我的用例,要么解决方案是查询数据,而不是如何保存或插入


谢谢。

您可以使用嵌入式

e、 g

在您的
DAO中插入示例

@Insert
fun insert(item: Coordinates)
您可以在insert函数中传递
坐标
实例变量

Address("your street", Coordinates(your_lat,your_lng))

谢谢你,穆罕默德。但如果我没记错的话,@Embedded被用来创建一个平面结构,它将填充地址表中的坐标列,这不是我目前的要求。我想要一个单独的地址表和坐标表,其中地址表主键是坐标表内的外键。希望这能进一步明确我的要求。
Address("your street", Coordinates(your_lat,your_lng))