Java 具有多个成员且具有相同自定义数据类型的实体

Java 具有多个成员且具有相同自定义数据类型的实体,java,android,kotlin,android-room,Java,Android,Kotlin,Android Room,我有实体级伤害 @Entity class Damage( @PrimaryKey(autoGenerate = true) var damageId: Int, var position: String, var place: DamageItem? = null, var cause: DamageItem? = null ) DamageItem是常规POJO data class DamageItem( v

我有实体级伤害

@Entity
class Damage(
        @PrimaryKey(autoGenerate = true)
        var damageId: Int,
        var position: String,
        var place: DamageItem? = null,
        var cause: DamageItem? = null
)
DamageItem是常规POJO

data class DamageItem(
var itemId: String,
var itemDesc: String)
在试图编译此代码时,它显示了一个错误

无法确定如何将此字段保存到数据库中。可以考虑为它添加一个类型转换器。< /强>

我曾想过首先使用@Embedded param表示位置和原因,但发现这不是解决方案


有什么办法可以解决这个问题吗?

我发现答案是官方文件本身。 只需向每个自定义数据类型添加带有前缀的嵌入式注释

将我的实体类更改为

@Entity class Damage(
    @PrimaryKey(autoGenerate = true)
    var damageId: Int,
    var position: String,
    @Embedded(prefix = "place_") var place: DamageItem? = null,
    @Embedded(prefix = "cause_") var cause: DamageItem? = null)

你们没说,但我猜你们在用房间。因此,有几种方法可以做你想做的事情

 data class DamageItem (
  var itemId: String,
  var itemDesc: String
)
当多个字段密切相关,但您的数据结构不足以创建包含这些字段的对象时,可以根据需要使用@Embedded访问数据,从而使代码更具可读性和可维护性


如果在“损坏”情况下需要直接从对象访问变量,则使用此选项。

感谢您的快速响应,可能会复制Hi@sonnet。您提到的问题是关于将列表保存到数据库中所需的转换器。我的问题有点不同。我的两个列有相同的自定义类型。不知怎的,我得到了这个错误。你可以编写typeconverter并发回将保存在表中的字符串。另外,为字段指定列名
@Entity
class Damage (
        @PrimaryKey(autoGenerate = true)
        var damageId: Int,
        var position: String,
        @Embedded
        var place: DamageItem? = null,
        .... 
)