Eer*_*ist 5 spring nullable spring-data-jpa kotlin semantics
我有一个用 Kotlin 编写的 Spring 实体:
@Entity
class Book(
@Id
var id: Long? = null,
var title: String? = null, // cannot actually be null, immutable
var isInStock: Boolean? = null, // cannot actually be null
var description: String? = null,
)
Run Code Online (Sandbox Code Playgroud)
所有字段都必须可为空,因为 Spring 需要初始化空对象。
但是,这使得实体的使用变得复杂,因为我总是必须将可为空的类型转换为其不可为空的等效类型。这不是语义:我想真正了解哪些字段实际上可以为空,哪些字段不能(或者只能null在初始化过程中)。
此外,某些字段是可变的,但有些字段在创建实体后不应更改。最好使用 Kotlinval并var做出这种区分。
所以,我想与以下课程一起工作:
class BetterBook(
val id: Long,
val title: String,
var isInStock: Boolean,
var description: String? = null,
)
Run Code Online (Sandbox Code Playgroud)
这样就很清楚哪些字段是可变的,哪些字段可以null。
我考虑过创建一个包装器Book。有人有过类似的想法吗?这在架构上是一个好的解决方案吗?
val实际上,您可以完全按照您想要的方式进行操作:使用而不是不可变属性定义类var,为它们提供不可为空的类型,并且没有默认构造函数。当设置数据库中的值时,Spring 使用反射来获取由 Kotlin 代码生成的(只读)属性底层的成员变量。对于默认构造函数(它在运行时确实需要),有一个kotlin-jpa 插件会在编译的代码中自动为您生成它。因此,基本上保持您的代码完全按照您惯用的方式编写(就像您对 所做的那样BetterBook),并使用 注释该类@Entity,但请确保应用该插件。
| 归档时间: |
|
| 查看次数: |
1537 次 |
| 最近记录: |