Большинство Котлин JPA пример кода выглядит следующим образомKotlin с JPA/Hibernate: без ленивой загрузки без `open`?
class Person(val name: String, val age: Int) { /* ... */ }
или даже
data class Person(val name: String="", val age: Int=0) { /* ... */ }
Теперь Hibernate User Guide, и я думаю, также несколько других ORMs, заявляют, что они обычно хотят, чтобы создать прокси или иным образом расширить класс модели, но чтобы разрешить в Kotlin класс должен быть явно определен open
. В настоящее время это невозможно с классами данных, и я полагаю, исходя из собственного опыта, что большинство людей не думают об этом при написании сущностей JPA в Котлине.
Таким образом, чтобы прийти на мой вопрос (это StackOverflow в конце концов), это достаточно, чтобы сделать
open class Person(val name: String, val age: Int) { /* ... */ }
или же мы на самом деле нужно сделать
open class Person(open val name: String, open val age: Int) { /* ... */ }
не напрасно препятствовать ORM при правильной работе?
Если это действительно вредно, мы должны, вероятно, предложить добавить предупреждение IntelliJ IDEA, что если класс имеет аннотацию @Entity
, ее следует определить open
.
Я не вижу, как здесь применимо слово «вредный». Не могли бы вы уточнить его использование или удалить его из вопроса, если это не важно? – voddan
Главным образом это факт, что по крайней мере Hibernate не может использовать классы с ленивой загрузкой, которые являются окончательными или имеют окончательные методы доступа, а использование классов данных для JPA часто выглядит как хорошая вещь, но может на самом деле повредить производительность, поскольку они являются окончательными по определению (в данный момент, по крайней мере, слышал, что это может измениться). Название очень щедрое, потому что я думал, что это должно быть чем-то более общеизвестным и предотвращать, например, приложения, перенесенные в Kotlin с худшей производительностью, чем Java-партнеры, а затем пользователи обвиняют Kotlin:/ – johnp
Спасибо, что перефразировали вопрос! – voddan