在 Kotlin 中使用 Room 的 @ForeignKey 作为 @Entity 参数
Using Room's @ForeignKey as @Entity parameter in Kotlin
我遇到了一个房间 tutorial,它在 class 定义中使用了 @PrimaryKey
注释:
@Entity(foreignKeys = @ForeignKey(entity = User.class,
parentColumns = "id",
childColumns = "userId",
onDelete = CASCADE))
public class Repo {
...
}
现在,我有以下数据 class 想要使用主键:
@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))
片段,但我无法编译:
An annotation can't be used as the annotations argument.
我想知道:为什么 (我认为是) 同样的概念在 Java 中有效,但在 Kotlin 中却无效?另外,有没有办法解决这个问题?
欢迎所有意见。
这是提供您正在寻找的注解的方法,使用显式数组作为参数,没有 @
用于嵌套注解的创建:
@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)])
我遇到了一个房间 tutorial,它在 class 定义中使用了 @PrimaryKey
注释:
@Entity(foreignKeys = @ForeignKey(entity = User.class,
parentColumns = "id",
childColumns = "userId",
onDelete = CASCADE))
public class Repo {
...
}
现在,我有以下数据 class 想要使用主键:
@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))
片段,但我无法编译:
An annotation can't be used as the annotations argument.
我想知道:为什么 (我认为是) 同样的概念在 Java 中有效,但在 Kotlin 中却无效?另外,有没有办法解决这个问题?
欢迎所有意见。
这是提供您正在寻找的注解的方法,使用显式数组作为参数,没有 @
用于嵌套注解的创建:
@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)])