У меня есть три класса Котлина, представляющие объекты гиберната:
@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() } }
Примечание. Мне нужно переопределить setter для id
чтобы впоследствии вызвать doSomething
. Так я уже делал это на Java раньше.
Он строит правильно, но 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
Таким образом, Kotlin не создаст новое поле на сущности, и он просто переопределит getter / setter.