Свойство Kotlin недоступно, когда объект загружен с помощью JPA / Hibernate - PullRequest
4 голосов
/ 20 сентября 2019

Если я загружаю экземпляры из следующих классов с помощью JPA / Hibernate и получаю доступ к свойству x, значение будет 0.Если я установлю точку останова для свойства, оно никогда не будет достигнуто.Похоже, что реализация здесь полностью игнорируется.

Сокращенный до соответствующих частей код выглядит следующим образом:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
abstract class Base {
    @Transient
    open val x = 1
}

@Entity
@DiscriminatorValue("D")
class Derived : Base() {
    @Transient
    override val x = 2
}

Однако, если я реализую метод получения явно, он работает:

override val x get() = 2

Насколько я знаю, компилятор Kotlin в этом случае не генерирует вспомогательное поле, но он должен генерировать метод получения, так как это свойство не private.В конце должен быть метод в обоих случаях.

Так в чем же разница, которая приводит к странному поведению, что x равно 0 и к реальному свойству никогда не обращаются?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...