我有三个代表Hibernate实体的Kotlin类:
@MappedSuperclass
abstract class Parent {
@Id @GeneratedValue @Column(nullable=false)
var id: Long? = null
}
@Entity
class Child1 {}
@Entity
class Child2 {
@Id @GeneratedValue @Column(nullable=false)
override var id: Long? = null
set(value) {
super.id = value
doSomething()
}
}
注意我需要覆盖id
的setter,然后再调用doSomething
。这就是我以前用Java完成的方式。
它构建正确,但Hibernate不喜欢它:
A foreign key refering Child2 from ... has the wrong number of column. Should be 2.
从其他一些错误中我怀疑覆盖id
没有被正确覆盖,Hibernate会从id
和Parent
两次看到Child2
列。
答案 0 :(得分:2)
我偶然发现了一个解决方案:
override var id: Long?
get() = super.id
set(value) {
super.id = value
doSomething()
}
诀窍是:
super
这样Kotlin就不会在实体上创建一个新字段,它只会覆盖getter / setter。