相关疑难解决方法(0)

Kotlin和JPA:默认构造函数地狱

正如JPA所要求的那样,@Entity类应该有一个默认(非arg)构造函数,用于在从数据库中检索对象时实例化对象.

在Kotlin中,在主构造函数中声明属性非常方便,如下例所示:

class Person(val name: String, val age: Int) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

但是当非arg构造函数被声明为次要构造函数时,它需要传递主构造函数的值,因此需要它们的一些有效值,如下所示:

@Entity
class Person(val name: String, val age: Int) {
    private constructor(): this("", 0)
}
Run Code Online (Sandbox Code Playgroud)

在情况下,当性能有一些更复杂的类型不只是StringInt他们是不可为空的,它看起来完全坏为他们提供价值,尤其是当有在主构造和太多的代码init块,当这些参数都在积极使用- - 当他们通过反射重新分配时,大部分代码将再次执行.

此外,val在构造函数执行后,-properties不能重新分配,因此不可变性也会丢失.

所以问题是:Kotlin代码如何适应JPA而不需要代码重复,选择"神奇"的初始值和失去不变性?

PS除了JPA之外,Hibernate是否可以构造没有默认构造函数的对象?

hibernate jpa default-constructor kotlin

113
推荐指数
6
解决办法
4万
查看次数

标签 统计

default-constructor ×1

hibernate ×1

jpa ×1

kotlin ×1