web-dev-qa-db-fra.com

Utilisation de @ForeignKey de Room comme paramètre @Entity dans Kotlin

Je suis tombé sur une salle tutoriel qui utilise l'annotation @PrimaryKey Sur la définition de classe:

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

Maintenant, j'ai la classe de données suivante qui souhaite utiliser une clé primaire:

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

    ...
}

Donc, je viens d'ajouter l'extrait @Entity(tableName = "Foo", foreignKeys = @ForeignKey(entity = Bar::class, parentColumns = "someCol", childColumns = "someOtherCol", onDelete = CASCADE)) en haut également, mais je ne peux pas compiler:

Une annotation ne peut pas être utilisée comme argument d'annotations.

Je me demande: comment se fait-il (ce que je pense est) le même concept fonctionnant dans Java mais pas dans Kotlin? Aussi , existe-t-il un moyen de contourner cela?

Toute contribution est la bienvenue.

24
Chisko

C'est la façon de fournir l'annotation que vous recherchez, avec des tableaux explicites pour les arguments, et pas de @ pour la création de l'annotation imbriquée:

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

Depuis Kotlin 1.2 , vous pouvez également utiliser des littéraux de tableau:

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