我正在使用java和Spring.作為測驗,我通過id查詢物件,然后嘗試保存同一個物件而不更新任何東西.當我這樣做時,我得到一個重復的密鑰例外.根據我讀過的內容,如果_id為null,則MongoRepository.save()應該執行插入,否則應執行更新.顯然,我應該得到更新.
一點代碼:
// Succeeds
Datatype sut = mongoRepository.findOne("569eac0dd4c623dc65508679");
// Fails with duplicate key.
mongoRepository.save(sut);
為什么?重復上面的其他類的物件,他們作業.我怎么能麻煩拍這個呢?我不知道如何分解并解決問題.
謝謝
錯誤:
27906 [http-bio-8080-exec-3] 2016-05-02 13:00:26,304 DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver -
Resolving exception from handler
[
public gov.nist.healthcare.tools.hl7.v2.igamt.lite.web.DatatypeSaveResponse
gov.nist.healthcare.tools.hl7.v2.igamt.lite.web.controller.DatatypeController.save(
gov.nist.healthcare.tools.hl7.v2.igamt.lite.domain.Datatype)
throws gov.nist.healthcare.tools.hl7.v2.igamt.lite.web.exception.DatatypeSaveException
]:
org.springframework.dao.DuplicateKeyException: {
"serverUsed" : "127.0.0.1:27017" ,
"ok" : 1 ,
"n" : 0 ,
"err" : "E11000 duplicate key error index: igl.datatype.$_id_ dup key: { : ObjectId('569eac0dd4c623dc65508679') }" ,
"code" : 11000};
nested exception is com.mongodb.MongoException$DuplicateKey: {
"serverUsed" : "127.0.0.1:27017" ,
"ok" : 1 ,
"n" : 0 ,
"err" : "E11000 duplicate key error index: igl.datatype.$_id_ dup key: { : ObjectId('569eac0dd4c623dc65508679') }" ,
"code" : 11000}
……重復
我剛剛發現了一個.如上所示保存時,spring會嘗試插入,即使填充了_id也是如此.
保存其他物件(未顯示但類似)時,彈簧執行,更新,并再次填充是_id.
為什么不同?檔案說彈簧應該在填充_id時更新,并在不填充時插入.
還有什么可以導致這個嗎?我的物件中有什么東西?也許我的讀取轉換器?
更新:我剛見過這個團隊.經過仔細審查,我們確定我們不再需要讀取轉換器.問題通過另一種方式解決.
uj5u.com熱心網友回復:
在資料庫端,您可能已創建唯一索引.請查看“https://docs.mongodb.com/manual/core/index-unique/”了解更多資訊.uj5u.com熱心網友回復:
原貼http://www.voidcn.com/article/p-nyuqcjru-byq.html轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/10136.html
標籤:其他技術討論專區
上一篇:現在的GIS發展啥情況了?
下一篇:hadoop3.1.1 $MkdirsRequestProto cannot be cast to com.google.protobuf.Message
