Spring Boot使用MongoRepository插入MongoDB后无法获取自动生成ID问题
问题原因
你遇到的问题根源是Kotlin data class中_id字段声明为了val(只读不可变),Spring Data MongoDB完成实体插入后,无法通过反射修改只读字段的赋值,所以返回的实体中_id仍然是初始化的空字符串,并不是save方法没有返回ID信息。
解决方案
方案1:修改字段为可变类型
将_id的修饰符从val改为var,允许字段被修改,Spring Data MongoDB插入成功后会自动把生成的ID回写到返回的实体对象中。
修改后的实体类代码示例:
@Document(collection = "data") data class Data( @Id var _id: String = "", val data: String )
修改完成后,你原有调用逻辑即可正常获取自动生成的ID:
repository.save(Data(data = "data")).awaitSingle()._id
方案2:主动生成ID赋值
如果你希望保持_id字段为不可变的val类型,可以在构造实体时主动生成MongoDB默认的ObjectId,再传入实体进行保存:
import org.bson.types.ObjectId // 构造实体时主动生成ID val newData = Data(_id = ObjectId.get().toString(), data = "data") repository.save(newData).awaitSingle() // 直接读取newData自带的_id即可
内容的提问来源于stack exchange,提问作者user17029003
相关产品推荐
相关产品推荐

