spring-boot - 为什么 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)
当实体记录是新的时调用插入
解决方案
推荐阅读
- c++ - Is there any way in C++ to cast/copy a Parent class into a Child class?
- node.js - 如何在每个服务器请求上设置 webpack 公共路径?
- javascript - 如何在悬停时为 svg 图标设置动画?
- c++ - C++ PEB_LDR_DATA 访问模块列表
- algorithm - 这段代码的最坏情况时间复杂度是多少?
- c# - 机器学习识别句子中的重要单词
- excel - 不能将 Excel 插件作为与启用的 COM 插件分开的选项卡
- c# - 在执行请求之前等待滚动时间窗口中的计数下降
- javascript - 通过 Javascript 下载 Apple 托管的按需标记资源
- javascript - 反转整个字符串,同时将空格保持在同一位置