映射异常(尝试添加 id) 升级到 Spring 引导 2.2.X 后



将 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 属性私有 java.util.Map 。CatalogIndex.document,但已经将属性私有 java.lang.String .CatalogIndex.id 注册为 id。检查您的映射配置!

请找到实体类层次结构。 为了简单起见,我删除了所有的吸气器和设置器。


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,以及具有匹配名称的属性文档

您必须将属性文档重命名为其他名称。

最新更新