mongodb 用于@ Id注解属性的Kotlin内联类

uoifb46i  于 2023-08-04  发布在  Go
关注(0)|答案(3)|浏览(81)

在我的业务逻辑中,我必须处理大量的实体ID,它们都是 String 类型的,这可能会导致混淆,特别是当你将其中的几个作为方法参数传递时。所以我想用 inline classes 引入一点类型安全。我知道,内联类在v1.3中仍然被标记为实验性的。然而,有没有人尝试过在DBMap上下文中使用 inline class 作为 @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将内联类转换为 primitive 可以完成这项工作。有过这样的经历吗?

68bkxrlz

68bkxrlz1#

内联类产生全新的类型,而不仅仅是类型化的Alias。即使我们的代码库知道这个新类型是什么,MongoDB也不知道。因此不能将内联类直接存储到相应的基元类型Fields中

4bbkushb

4bbkushb3#

作为对@JuergenZimmermann的回答的更新,Spring Data Commons从版本3.2开始支持这一点(目前是预发布):
https://github.com/spring-projects/spring-data-commons/releases/tag/3.2.0-M1
然后OP编写的代码应该按照给定的方式工作。有关详细讨论,请参阅此处:https://github.com/spring-projects/spring-data-commons/pull/2866

相关问题