首页 > 解决方案 > Room TypeConverter 将多个数据库列转换为一个字段?

问题描述

有没有办法让一个 Room TypeConverter 接受多个表字段并将它们组合成某个对象?

例如,假设我有一个表 Foo ,其中包含 columns INT numeratorINT denominator(一起代表一个分数)和INT unit(unit 映射到一个测量单位的枚举)。我想将它们组合成MyScalar(Fraction(numerator, denominator), unit). 例如,可能取一行(1, 5, 2)2映射到的位置MeasurementUnit.KG)并使用 a@TypeConverter将此行转换为MyScalar(Fraction(1,5), MeasurementUnit.KG)

现在我只是在做

data class MyEntity(
    val numerator: Int, 

    val denominator: Int, 

    @TypeConverters(IntAndUnitConverter::class) 
    val unit: MeasurementUnit
) {
    fun combine(): MyScalar {
        return MyScalar(Fraction(numerator, denominator), unit)
    }
}

data class MyScalar(val value: Fraction, val unit: MeasurementUnit)

似乎可以解决问题,但我发现让我的@Entity 具有 @TypeConverters(SomeThreeColumnConverter::class) 的想法很有吸引力,而不用担心记住调用 combine() 或类似的东西。

我不认为这是可能的,但想检查一下。

标签: androidandroid-roomandroid-database

解决方案


推荐阅读