@Id 注解属性的 Kotlin 内联类

Mat*_*att 7 domain-driven-design mongodb kotlin spring-data-mongodb kotlin-inline-class

在我的业务逻辑中,我必须处理大量实体 ID,它们全部都是String类型,这可能会导致混乱,尤其是当您将其中几个作为方法参数传递时。所以我考虑通过内联类引入一点类型安全性。我知道,内联类在 v1.3 中仍然被标记为实验性的。尽管如此,有没有人尝试过在数据库映射上下文中使用内联类作为@Id属性,在我的例子中是带有 Spring Data 的 MongoDB。

@Entity
class User {
   @Id
   var id: UserId
}
Run Code Online (Sandbox Code Playgroud)

inline class UserId(val id: String)
Run Code Online (Sandbox Code Playgroud)

我猜底层属性没有拆箱,所以 _id 最终会作为数据库中的对象?Spring 的 CrudRepository 接口又如何呢?它似乎可以编译,但最终会起作用:

interface UserRepository : CrudRepository<User, UserId>
Run Code Online (Sandbox Code Playgroud)

可能使用AttributeConverter将内联类转换为原语可以完成这项工作。有这方面的经验吗?

Moh*_*hna 1

内联类产生全新的类型,而不仅仅是类型化的别名。即使我们的代码库知道这个新类型是什么,MongoDB 也不对吗?所以你不能将内联类直接存储到相应的原始类型Fields中