Spring MongoRepository 正在更新或更新而不是插入
Spring MongoRepository is updating or upserting instead of inserting
我正在使用 :
org.springframework.data.mongodb.repository.MongoRepository
我从一个空的数据库开始,然后用 _id = 1234
创建一个对象,然后将其他一些字符串字段设置为 hello
,然后执行:
repository.save(object);
一切顺利,它将文档保存在 MondoDB 中。
我创建了一个新对象,设置了相同的 _id = 1234
但将另一个字符串字段设置为 world
然后再保存到另一个 :
repository.save(newObject);
结果:保存有效但更新了原始对象。
预期结果:这应该会失败并显示 DuplicateKeyException
,因为 _id
是唯一的,我在每次保存时使用 2 个单独的对象。
缺陷 spring 还是我做错了什么???
Save,根据定义,应该更新 upsert 样式的对象,如果存在则更新,如果不存在则插入。
阅读 save
关于 MongoDb website
的操作文档
mongodb 中的 insert 操作具有您期望的行为,但从 MongoRepository 文档看来,insert 被委托保存,因此它不会做任何区别。但是您可以尝试一下,看看它是否适合您。否则你可以做一个 get before 来检查对象是否存在,因为它是一个索引查找它会很快。
编辑:检查您的存储库版本,插入 是在version 1.7.
中引入的
只有当您为其中一个字段添加了@Id 注释时,应用程序才会更新,经过长时间的努力才找到这个
@Document(collection="bus")
public class Bus {
// @Indexed(unique=true, direction=IndexDirection.DESCENDING, dropDups=true)
@Id
private String busTitle;
private int totalNoOfSeats;
private int noOfSeatsAvailable;
private String busType;
}
但不知何故我无法使用
@Indexed(unique=true, direction=IndexDirection.DESCENDING, dropDups=true)
我正在使用 :
org.springframework.data.mongodb.repository.MongoRepository
我从一个空的数据库开始,然后用 _id = 1234
创建一个对象,然后将其他一些字符串字段设置为 hello
,然后执行:
repository.save(object);
一切顺利,它将文档保存在 MondoDB 中。
我创建了一个新对象,设置了相同的 _id = 1234
但将另一个字符串字段设置为 world
然后再保存到另一个 :
repository.save(newObject);
结果:保存有效但更新了原始对象。
预期结果:这应该会失败并显示 DuplicateKeyException
,因为 _id
是唯一的,我在每次保存时使用 2 个单独的对象。
缺陷 spring 还是我做错了什么???
Save,根据定义,应该更新 upsert 样式的对象,如果存在则更新,如果不存在则插入。
阅读 save
关于 MongoDb website
mongodb 中的 insert 操作具有您期望的行为,但从 MongoRepository 文档看来,insert 被委托保存,因此它不会做任何区别。但是您可以尝试一下,看看它是否适合您。否则你可以做一个 get before 来检查对象是否存在,因为它是一个索引查找它会很快。
编辑:检查您的存储库版本,插入 是在version 1.7.
中引入的只有当您为其中一个字段添加了@Id 注释时,应用程序才会更新,经过长时间的努力才找到这个
@Document(collection="bus")
public class Bus {
// @Indexed(unique=true, direction=IndexDirection.DESCENDING, dropDups=true)
@Id
private String busTitle;
private int totalNoOfSeats;
private int noOfSeatsAvailable;
private String busType;
}
但不知何故我无法使用 @Indexed(unique=true, direction=IndexDirection.DESCENDING, dropDups=true)