You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:18:03