La maggior parte Kotlin JPA codice di esempio si presentaKotlin con JPA/Hibernate: nessun caricamento pigro senza `open`?
class Person(val name: String, val age: Int) { /* ... */ }
o anche
data class Person(val name: String="", val age: Int=0) { /* ... */ }
Ora, il Hibernate User Guide, e credo che anche molti altri ORM, statali che di solito vogliono creare proxy o comunque estendere la classe del modello, ma per consentire che in Kotlin la classe debba essere definita esplicitamente open
. Questo è attualmente impossibile con le classi di dati e presumo, a giudicare dalla mia esperienza, che molte persone non ci pensano quando scrivono entità JPA in Kotlin.
Quindi, per venire alla mia domanda (questo è StackOverflow dopo tutto), è sufficiente fare
open class Person(val name: String, val age: Int) { /* ... */ }
o sarebbe in realtà hanno a che fare
open class Person(open val name: String, open val age: Int) { /* ... */ }
di non inutilmente ostacolare il ORM a fare il suo lavoro correttamente?
Se è davvero dannoso, dovremmo probabilmente proporre di aggiungere un avviso a IntelliJ IDEA, che se una classe ha un'annotazione @Entity
, dovrebbe essere definita open
.
Non vedo come la parola "nocivo" sia applicabile qui. Potresti chiarire il suo uso o cancellarlo dalla domanda se non è importante? – voddan
Principalmente è il fatto che almeno Hibernate non può eseguire il caricamento lazy di classi definitive o con metodi di accesso definitivi e l'utilizzo di classi di dati per JPA spesso sembra una buona cosa da fare, ma può davvero danneggiare le prestazioni, perché sono definitive per definizione (almeno al momento, sentito che può cambiare). Il titolo è molto cliccabile, perché pensavo che dovesse essere qualcosa di più universalmente noto e per evitare ad es. le applicazioni trasferite su Kotlin hanno prestazioni peggiori rispetto alla controparte Java e gli utenti accusano Kotlin:/ – johnp
Grazie per aver parafrasato la domanda! – voddan