spring-data-elasticsearch - 升级到spring boot 2.2.X后的MappingException(Attempt to add id)
问题描述
将 spring boot 升级到 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。检查您的映射配置!
请找到实体类层次结构。为了简单起见,我删除了所有的 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 Data Elasticsearch 在检查 Entity 类时,会尝试找出该类的哪个属性将用作Id属性。如果满足以下条件之一,则属性符合此条件:
- 该属性带有注释
@Id
- 该属性被命名为id
- 该属性被命名为文档
因此,在您的情况下,您拥有具有匹配名称和注释的属性id ,以及具有匹配名称的属性文档。
您必须将您的财产文件重命名为不同的东西。
推荐阅读
- javascript - 如何为 JS Array.includes() 提供 equals/hash 函数?
- node.js - 在 Node.js 中使用 Crypto 进行加密没有给出预期的结果
- amazon-web-services - 运行 ng build 后以角度生成的“输出”文件与“dist”文件相同吗?
- c# - c#在IndexOutOfRange中检查循环+中断结果的索引?
- javascript - 将环数组转换为 geoJSON 对象
- rust - 如何使用 Rust nom 获取字符串的最后一次出现?
- android - Room 不更新现有的预定义数据库
- python - 如何将相交的二维列表链(列表列表)合并到单个二维列表列表中
- html - Ionic 5 表单布局 - 如何并排输入和选择
- python - 运行DecisionTreeRegressor算法后如何选择特征?