升级到 spring boot 2.2.X 后出现 MappingException(尝试添加 id)
MappingException(Attempt to add id) after upgrading to spring boot 2.2.X
将 spring 引导升级到 2.2.4(从 2.1.x)后,org.springframework.cloud:spring-cloud-dependencies 到 Hoxton.RELEASE org.springframework.cloud:spring-cloud-stream-dependencies 到 Horsham.RELEASE.
尝试创建索引文档时出现以下异常。
原因:org.springframework.data.mapping.MappingException:尝试添加 id 属性 private java.util.Map .CatalogIndex.document 但已经有 属性 private java.lang.String 。 CatalogIndex.id注册为id。检查您的映射配置!
请查找实体 class 层次结构。为了简单起见,我删除了所有 getter 和 setter。
package mypackage.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Parent;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class CatalogIndex {
private static final long serialVersionUID = 1L;
@Id
private String id;
@Parent(type = "Initiative")
private String initiativeId;
private List<Map<String, Object>> typeHierarchy;
private Map<String, Object> document;
private List<Map<String, Object>> filters;
}
package mypackage.entity;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "cataloginitiative")
public class CatalogInitiativeIndex extends CatalogIndex { }
Spring 数据 Elasticsearch 在检查实体 class 时,试图找出 class 中的哪个 属性 将用作 Id属性。如果满足以下条件之一,则 属性 符合此条件:
- 属性 被注释为
@Id
- 属性 被命名为 id
- 属性 被命名为 文档
因此在您的情况下,您有 属性 id 具有匹配的名称和注释,以及 属性 文档 具有匹配的名称。
您必须将 属性 文档 重命名为不同的名称。
将 spring 引导升级到 2.2.4(从 2.1.x)后,org.springframework.cloud:spring-cloud-dependencies 到 Hoxton.RELEASE org.springframework.cloud:spring-cloud-stream-dependencies 到 Horsham.RELEASE.
尝试创建索引文档时出现以下异常。
原因:org.springframework.data.mapping.MappingException:尝试添加 id 属性 private java.util.Map .CatalogIndex.document 但已经有 属性 private java.lang.String 。 CatalogIndex.id注册为id。检查您的映射配置!
请查找实体 class 层次结构。为了简单起见,我删除了所有 getter 和 setter。
package mypackage.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Parent;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class CatalogIndex {
private static final long serialVersionUID = 1L;
@Id
private String id;
@Parent(type = "Initiative")
private String initiativeId;
private List<Map<String, Object>> typeHierarchy;
private Map<String, Object> document;
private List<Map<String, Object>> filters;
}
package mypackage.entity;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "cataloginitiative")
public class CatalogInitiativeIndex extends CatalogIndex { }
Spring 数据 Elasticsearch 在检查实体 class 时,试图找出 class 中的哪个 属性 将用作 Id属性。如果满足以下条件之一,则 属性 符合此条件:
- 属性 被注释为
@Id
- 属性 被命名为 id
- 属性 被命名为 文档
因此在您的情况下,您有 属性 id 具有匹配的名称和注释,以及 属性 文档 具有匹配的名称。
您必须将 属性 文档 重命名为不同的名称。