Jan*_*ngo 12 hibernate jpa kotlin
我最近正在使用 Kotlin 和 JPA 进行开发。我使用 Kotlin 数据类作为 JPA @Entity 类。
但是现在,关系出现了一些问题
@ManyToOne(fetch = FetchType.LAZY, optional = true)
Run Code Online (Sandbox Code Playgroud)
延迟获取不适用于数据类。
我了解到 Kotlin 数据类默认为“final”,因此 Hibernate 无法为它们生成代理。
我想知道将 Kotlin 数据类用作 JPA @Entity 类是否是一个错误,或者还有其他方法可以使延迟获取与数据类一起正常工作。
Jan*_*ngo 13
这个 Spring 官方指南表明我们不应该将 kotlin 数据类与 spring-data-jpa 一起使用。
他们说什么:
在这里,我们不使用具有 val 属性的数据类,因为 JPA 并非设计为与不可变类或由数据类自动生成的方法一起使用。如果您使用其他 Spring Data 风格,它们中的大多数都旨在支持此类构造,因此在使用 Spring Data MongoDB、Spring Data JDBC 等时,您应该使用数据类 User(val login: String, ...?) 等类。
没错:Kotlin 数据类默认是不可变的,但这不应该阻止您使用延迟获取。
为了使延迟获取按预期工作,实体应该是开放的。Kotlin allopen
您可以使用为此目的调用的插件:
plugins {
...
kotlin("plugin.allopen") version "1.3.61"
}
allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.Embeddable")
annotation("javax.persistence.MappedSuperclass")
}
Run Code Online (Sandbox Code Playgroud)
https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.allopen
归档时间: |
|
查看次数: |
9900 次 |
最近记录: |