3

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

@Entity
class User {
   @Id
   var id: UserId
}

inline class UserId(val id: String)

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

interface UserRepository : CrudRepository<User, UserId>

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

4

2 回答 2

0

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

于 2020-03-10T09:14:14.150 回答
0

Spring Data Commons 有一张未解决的票:https ://github.com/spring-projects/spring-data-commons/issues/1947

于 2021-05-03T02:22:25.387 回答