Kotlin内联类,用于@Id注释的属性

时间:2020-01-03 15:50:35

标签: mongodb kotlin spring-data-mongodb kotlin-inline-class

在我的业务逻辑中,我必须处理很多实体ID,它们的所有类型均为 String ,这会引起混乱,尤其是当您将它们作为方法参数传递时。因此,我考虑过在内联类中引入一点类型的安全性。我知道,内联类在v1.3中仍被标记为实验性的。但是,有没有人尝试过在数据库映射上下文中使用 inline class 作为 @Id 属性,在我的例子中是带有Spring Data的MongoDB。

setPriority(QueryJobConfiguration.Priority.BATCH)

使用

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

我猜没有对基础属性进行拆箱,因此_id最终将成为数据库中的对象吗?那么Spring的CrudRepository接口呢?似乎可以编译,但最终会起作用:

inline class UserId(val id: String)

可能使用interface UserRepository : CrudRepository<User, UserId> 将内联类转换为 primitive 可能会起作用。有任何经验吗?

2 个答案:

答案 0 :(得分:0)

内联类会产生全新的类型,而不仅仅是类型化的Alias。即使我们的代码库知道MongoDB是什么新类型,对吗?因此,您不能将内联类直接存储到相应的原始类型Fields

答案 1 :(得分:0)

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