web-dev-qa-db-ja.com

ルームの@ForeignKeyをKotlinの@Entityパラメーターとして使用する

クラス定義で_@PrimaryKey_アノテーションを使用するRoom tutorial に出会いました。

_@Entity(foreignKeys = @ForeignKey(entity = User.class,
                              parentColumns = "id",
                              childColumns = "userId",
                              onDelete = CASCADE))
public class Repo {
    ...
}
_

今、主キーを使用したい次のデータクラスがあります。

_@Parcel(Parcel.Serialization.BEAN) 
data class Foo @ParcelConstructor constructor(var stringOne: String,
                                              var stringTwo: String,
                                              var stringThree: String): BaseFoo() {

    ...
}
_

そのため、先頭に@Entity(tableName = "Foo", foreignKeys = @ForeignKey(entity = Bar::class, parentColumns = "someCol", childColumns = "someOtherCol", onDelete = CASCADE))スニペットも追加しましたが、コンパイルできません。

注釈を注釈引数として使用することはできません。

不思議:どうして(私が思うに)同じ概念がJavaでもKotlinではない? 、これを回避する方法はありますか?

すべての入力を歓迎します。

24
Chisko

これは、探している注釈を提供する方法であり、引数に明示的な配列を使用し、@ネストされた注釈の作成:

@Entity(tableName = "Foo", 
    foreignKeys = arrayOf(
            ForeignKey(entity = Bar::class, 
                    parentColumns = arrayOf("someCol"), 
                    childColumns = arrayOf("someOtherCol"), 
                    onDelete = CASCADE)))

Kotlin 1.2 なので、配列リテラルも使用できます。

@Entity(tableName = "Foo",
    foreignKeys = [
        ForeignKey(entity = Bar::class,
                parentColumns = ["someCol"],
                childColumns = ["someOtherCol"],
                onDelete = CASCADE)])
63
zsmb13