13
的我使用的是:春天MongoRepository被更新或替代upserting插入
org.springframework.data.mongodb.repository.MongoRepository
我先建立一个空数据库,并创建一个对象,具有_id = 1234
例如,和其他一些字符串字段设置为hello
例如,然后执行:
repository.save(object);
一切都很好,它将文档保存在MondoDB中。
我创建了一个新的对象,设置相同_id = 1234
但其他字符串字段设置为world
,然后到另一个保存:
repository.save(newObject);
结果:保存工作,但更新原始对象。
预期结果:由于_id
是唯一的,因此应该会失败,因为DuplicateKeyException
,因此每次保存时我使用2个单独的对象。
春季缺陷还是我做错了什么?
问题是,'_id'似乎表现不同于任何其他领域。例如,如果我在mongo文档中有一个名为'name'的字段,并在该字段上创建一个UNIQUE索引,则执行我的问题中提到的步骤将导致抛出期望的'DuplicateKeyException'。而且,对于spring mongorepository API,没有'insert' API,只有'save'。我有一种感觉,这是春天的一个错误。 – Marc 2015-03-13 14:39:30
有一个插入方法:http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/repository/MongoRepository.html#insert-S- – tinker 2015-03-13 14:41:52
索引验证是不同的,保存中的优化是它可以直接更新对象,如果它被发现,这是设计。 – tinker 2015-03-13 14:42:48