我正在尝试使用ROOM数据库,并且具有如下所示的嵌套JSON,
{
company_id: “”
employees : [
{
employee_id: “”
company_id: “”
adresses: [
{
address_id: “”
employee_id: “”
},
{
address_id: “”
employee_id: “”
}
]
},
{
employee_id: “”
company_id: “”
adresses: [
{
address_id: “”
employee_id: “”
},
{
address_id: “”
employee_id: “”
}
]
}
]
}
我正在尝试使用ROOM保存Company对象。
我已经阅读了许多有关类似问题的文章和答案,但是对于实现这一点,我并没有获得令人满意的答案。 我知道@Embedded批注,如果Class具有可以嵌入到同一实体中的另一个类的对象,并且ROOM为嵌入的类创建其他列,该注释将很有用。 我也知道TypeConverters,它有助于保存其他对象列表。但是,如果该嵌套类具有另一个对象列表,例如在我的示例中Company有List而Employee有List怎么办? 如果我没有记错,我可以在这种情况下使用ForeignKey概念。但是我不确定是否要获取公司的数据,然后嵌套列表将与Company对象一起返回,还是我必须分别查询其他列表并将其添加到Company对象中,然后才能返回使用。
下面是我的类结构。
data class Company(
//Other data…
var employees : List<Employee>? = null
)
data class Employee(
//Other data…
var adresses : List<Address>? = null
)
data class Address(
//Other data…
)
任何有关将此类数据保存到ROOM并将其取回的帮助都将受到赞赏。预先感谢。
我已经解决了我的问题,我将Typeconverters用于内部嵌套列表。而且我能够保存和检索整个父对象。感谢大家抽出时间来检查我的关心。以下是我的操作方式,
@Entity(tableName = "company_table")
data class Company(
//Other data…
@TypeConverters(EmployeeTypeConverter::class)
var employees : List<Employee>? = null
)
data class Employee(
//Other data…
@TypeConverters(AddressTypeConverter::class)
var adresses : List<Address>? = null
)
data class Address(
//Other data…
)
请记住不要用@Entity注释Employee和Address类。