【发布时间】:2016-10-10 13:25:16
【问题描述】:
大多数 Kotlin JPA 示例代码如下所示
class Person(val name: String, val age: Int) { /* ... */ }
甚至
data class Person(val name: String="", val age: Int=0) { /* ... */ }
现在,Hibernate User Guide 以及其他几个 ORM 声明他们通常想要创建代理或以其他方式扩展模型类,但要允许在 Kotlin 中明确定义该类 open。目前这对于数据类来说是不可能的,我认为,根据我自己的经验,大多数人在用 Kotlin 编写 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。
【问题讨论】:
-
我不明白“有害”这个词在这里是如何适用的。如果它不重要,您能否澄清它的用途或将其从问题中删除?
-
主要是这样一个事实,至少 Hibernate 不能延迟加载最终类或具有最终访问器方法的类,并且为 JPA 使用数据类通常看起来是一件好事,但实际上会损害性能,因为根据定义它们是最终的(至少目前;听说可能会改变)。标题很容易点击,因为我认为这应该是更广为人知的东西,并防止例如移植到 Kotlin 的应用程序的性能比 Java 对应物差,然后用户指责 Kotlin:/
-
感谢您解释问题!
标签: hibernate jpa orm lazy-loading kotlin