重写Kotlin的财产二传导致两个JPA @Id
我有三个代表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中完成id的方式。
它构建正确,但Hibernate不喜欢它:
A foreign key refering Child2 from ... has the wrong number of column. Should be 2.
从其他错误,我怀疑被重写的id
没有被正确覆盖和Hibernate看到id
列两次 – 从Parent
和Child2
。
我无意中发现了一个解决方案:
override var id: Long? get() = super.id set(value) { super.id = value doSomething() }
诀窍是:
- 不为该字段分配值
- 创建一个连接到
super
的getter
这样Kotlin不会在实体上创建一个新的字段,而只会覆盖getter / setter。