如何在Android房间中嵌入实体列表?

时间:2018-09-04 12:39:32

标签: java android persistence android-room

我想在另一个实体中嵌入某个实体类的列表 像:

@Entity
public class FirstEntity() {}

@Entity
public class SecondEntity() {

@Embedded
List<FirstEntity> firstEntities ;

}

谁能给我一个例子的解决方案。 谢谢

2 个答案:

答案 0 :(得分:0)

您需要使用转换器。我通过GSON库将对象列表转换为JSON字符串(因此将依赖项添加到gradle文件中):

implementation 'com.google.code.gson:gson:2.8.2'

首先创建一个带有@TypeConverter批注的Converter来转换您的List(这里是带有Output类的示例):

class OutputConverter {

    @TypeConverter
    fun fromOutputList(outputs: List<Output>?): String? {
        if (outputs == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<List<Output>>() {}.type
        return gson.toJson(outputs, type)
    }

    @TypeConverter
    fun toOutputList(outputString: String?): List<Output>? {
        if (outputString == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<List<Output>>() {}.type
        return gson.fromJson(outputString, type)
    }
}

然后,您需要在数据库类中声明Converter:

@Database(entities = [(YourParentClass::class)], version = 1)
@TypeConverters(OutputConverter::class)
abstract class YourDataBase : RoomDatabase() {
    abstract fun yourDao(): YourDao
}

答案 1 :(得分:0)

您应该对问题使用联接,而不是增加数据冗余。如果您想学习转到https://www.guru99.com/sqlite-join.html#1。我认为这种方式会更好。