meisten Kotlin JPA Beispiel-Code sieht wie folgt ausKotlin mit JPA/Hibernate: kein Lazy-Loading ohne `open`?
class Person(val name: String, val age: Int) { /* ... */ }
oder sogar
data class Person(val name: String="", val age: Int=0) { /* ... */ }
nun die Hibernate User Guide, und ich denke, auch mehrere andere ORMs an, daß sie wollen in der Regel Proxies erstellen oder auf andere Weise erweitern die Modellklasse, aber um dies in Kotlin zu ermöglichen, muss die Klasse explizit definiert werden open
. Dies ist derzeit bei Datenklassen nicht möglich, und ich gehe davon aus, dass die meisten Leute bei der Erstellung von JPA-Entitäten in Kotlin nicht darüber nachdenken.
, also auf meine Frage kommen (das ist Stackoverflow, nachdem alle), ist es genug
open class Person(val name: String, val age: Int) { /* ... */ }
oder würden wir tun müssen, tatsächlich
open class Person(open val name: String, open val age: Int) { /* ... */ }
nicht unnötig zu behindern, tun ORM bei seiner Arbeit richtig machen?
Wenn es wirklich schädlich ist, sollten wir wahrscheinlich vorschlagen, IntelliJ IDEA eine Warnung hinzuzufügen, dass, wenn eine Klasse eine @Entity
Annotation hat, sollte sie open
definiert werden.
Ich sehe nicht, wie das Wort "schädlich" hier anwendbar ist. Können Sie seine Verwendung klären oder aus der Frage löschen, wenn es nicht wichtig ist? – voddan
Hauptsächlich ist es die Tatsache, dass zumindest Hibernate keine Lazy-Loads für finale oder finale Accessor-Methoden ausführen kann und die Verwendung von Datenklassen für JPA sieht oft gut aus, kann aber die Performance beeinträchtigen, da sie per Definition final sind (zumindest im Moment, hörte, dass sich das ändern kann). Der Titel ist sehr Clickbaity, weil ich dachte, dass etwas allgemein bekannter sein sollte und z. Anwendungen, die nach Kotlin portiert wurden, haben eine schlechtere Leistung als das Java-Pendant und die Benutzer beschuldigen Kotlin:/ – johnp
Vielen Dank, dass Sie die Frage paraphrasiert haben! – voddan