Room @ForeignKey 在更新到 2.4.0 时,此注释不适用于具有支持字段的目标成员 属性

Room @ForeignKey This annotation is not applicable to target member property with backing field when updating to 2.4.0

在使用@ForeignKey 注释的字段上更新到 Room 2.4.0-rc01 时遇到问题。此版本在其定义中添加了一个空的@Target,使其无法定位属性。

@Entity
class Foo {
    @PrimaryKey
    @ColumnInfo
    var id: String = ""

    @ForeignKey(entity = Foo::class, parentColumns = ["bar_id"], childColumns = ["bar"])
    @ColumnInfo
    var bar: String? = null
}

@Entity
class Bar {
    @PrimaryKey
    @ColumnInfo
    var bar_id: String = ""
}

我在 @ForeignKey 注释处出现以下错误:此注释不适用于目标 'member property with backing field'

我发现@Target 为空的注解只能放在其他注解中

所以解决方案是将@ForeignKey 移动到@Entity 中,如下所示:

@Entity(foreignKeys = [ForeignKey(entity = Bar::class, parentColumns = ["bar_id"], childColumns = ["bar"])])
class Foo {
    @PrimaryKey
    @ColumnInfo
    var id: String = ""

    @ColumnInfo
    var bar: String? = null
}

@Entity
class Bar {
    @PrimaryKey
    @ColumnInfo
    var bar_id: String = ""
}

请注意,以前甚至无法对字段进行注释。所以根本没有创建外键。