spring data mongo db:扩展基本域类时出现重复键错误

问题描述

我有一个从BaseDomainObject扩展的域对象,它具有Lombok批注。

@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true,callSuper = false)
@Document(collection = "SubmissionApplication")
public class SubmissionApplication extends BaseDomainObject {

    @Id
    @JsonProperty("applicationId")
    @EqualsAndHashCode.Include
    private String id;
    private ApplicationSource applicationSource;
    private String applicationCompletionDate;

}

BaseDomainObject.java

public abstract class BaseDomainObject implements Serializable {
    @CreatedBy
    private String createdBy;
    @CreatedDate
    private Date createdDate;
    @LastModifiedBy
    private String lastModifiedBy;
    private String updateDate;
    @LastModifiedDate
    private Date lastModifiedDate;
    @Version
    private Integer version;
    private String createDate;
    private Boolean active = true;
    private String updatedBy;
    private Integer totalCount;

    public BaseDomainObject() {
    }

    .... getters/setters
}

并且当我尝试repo.save(application)更新现有文档时,出现异常:

com.mongodb.MongoWriteException: E11000 duplicate key error collection: APP.SubmissionApplication index: _id_ dup key: { _id: ObjectId('5f43aef2e878fb1e0b34aab3') }
    at com.mongodb.client.internal.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:1015) ~[mongodb-driver-sync-4.0.4.jar:na]
    at com.mongodb.client.internal.MongoCollectionImpl.executeInsertOne(MongoCollectionImpl.java:469) ~[mongodb-driver-sync-4.0.4.jar:na]
    at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:452) ~[mongodb-driver-sync-4.0.4.jar:na]
    at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:446) ~[mongodb-driver-sync-4.0.4.jar:na]
    at org.springframework.data.mongodb.core.MongoTemplate.lambda$insertDocument$15(MongoTemplate.java:1442) ~[spring-data-mongodb-3.0.1.RELEASE.jar:3.0.1.RELEASE]
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:566) ~[spring-data-mongodb-3.0.1.RELEASE.jar:3.0.1.RELEASE]
    at org.springframework.data.mongodb.core.MongoTemplate.insertDocument(MongoTemplate.java:1436) ~[spring-data-mongodb-3.0.1.RELEASE.jar:3.0.1.RELEASE]
    at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:1236) ~[spring-data-mongodb-3.0.1.RELEASE.jar:3.0.1.RELEASE]
    at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1168) ~[spring-data-mongodb-3.0.1.RELEASE.jar:3.0.1.RELEASE]
    at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:84) ~[spring-data-mongodb-3.0.1.RELEASE.jar:3.0.1.RELEASE]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.data.repository.core.support.ImplementationInvocationMetadata.invoke(ImplementationInvocationMetadata.java:72) ~[spring-data-commons-2.3.1.RELEASE.jar:2.3.1.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:382) ~[spring-data-commons-2.3.1.RELEASE.jar:2.3.1.RELEASE]

如果我删除扩展BaseDomainObject,spring数据mongodb将正确更新文档。

我在做什么错了?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)