首页 > 解决方案 > 为什么 Spring Data MongoDB 插入/保存操作不返回 ObjectId

问题描述

我已经尝试了几种方法(你可以假设我的 MongoConfiguration 是正确的)

使用implementation 'org.springframework.boot:spring-boot-starter-data-mongodb:2.5.3'

我的课

@Document(collection = "address")
class Address {
    @Id
    var id: String? = null
    var label: String? = null
    var number: String? = null
    var street: String? = null
    ...

我的仓库

@Repository
interface AddressRepository : MongoRepository<Address, String> {
    fun findByLabel(label: String): Address
}

在我的 @RestController我调用保存(或插入)

val savedAddress = addressRepository.insert(address)

根据Gradle: org.springframework.data:spring-data-mongodb:3.1.6以及Gradle: org.springframework.data:spring-data-commons:2.4.6文档

返回:保存的实体;永远不会为空。

然而它确实创造了一个记录!我使用 Compass 检查了结果

但它只呼应了我用来创建它的地址内容!没有 ID 如果我要查询记录,例如

returnedAddress= savedAddress.label?.let { addressRepository.findByLabel(it) }!!

我得到了带有 ID 的 rocord!我现在检测到这种行为一段时间,如果 Id 是集合中唯一的唯一键,则并不总是可以再次找到正确的记录!

有错误吗?,配置或任何其他方式我可以得到正确的 ObjectId / _id

注意: <S extends T> S save(S entity)当实体记录是新的时调用插入

标签: spring-bootkotlinspring-data-mongodb

解决方案


推荐阅读