在我的业务逻辑中,我必须处理很多实体ID,它们的所有类型均为String,这可能引起混乱,尤其是当您将它们作为方法参数传递时。因此,我考虑使用inline classes引入一点类型安全性。我知道,内联类在v1.3中仍被标记为实验性的。不过,有没有人尝试过在数据库映射上下文中使用inline class作为@ Id属性,在我的例子中是带有Spring Data的MongoDB。
@Entity
class User {
@Id
var id: UserId
}
with
inline class UserId(val id: String)
我猜没有对基础属性进行拆箱,因此_id将最终成为数据库中的一个对象?那么Spring的CrudRepository接口呢?它似乎可以编译,但最终会起作用:
interface UserRepository : CrudRepository<User, UserId>
可能使用AttributeConverter
将内联类转换为primitive可能会起作用。有任何经验吗?
内联类会产生全新的类型,而不仅仅是类型化的Alias。即使我们的代码库知道MongoDB是什么新类型,对吗?因此,您不能将内联类直接存储到相应的原始类型中。