【solr】Spring data solr Document is missing mandatory uniqueKey field: id 注意这个坑

Caused by: org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Document is missing mandatory uniqueKey field: id
	at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:552)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
	at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124)
	at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116)
	at org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:187)
	at org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:184)
	at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:141)
	... 32 more

出现这个报错,如果你从网上找到的解决方法还是无法解决这个问题的话, 那就注意一下下面这个地方: 

        TbItemExample example = new TbItemExample();
        TbItemExample.Criteria criteria = example.createCriteria();
        criteria.andStatusEqualTo("1");
        List<TbItem> list = itemMapper.selectByExample(example);

        //利用spring data solr将所有数据存入索引库
        solrTemplate.saveBean(list);  //这里存的是集合,应该使用: saveBeans()方法
        //提交
        solrTemplate.commit();

存储时,若存储的是单个的实体对象,则用saveBean()方法, 若存储的是集合则应该用saveBeans()方法, 犯这个问题的主要是对API不熟导致的! 特地记录下提醒自己

另外还需要注意的是: 若加字段注解的实体类有map集合类型的一定要 泛型, 不然就会报 空指针异常!!!

    @Dynamic
    @Field("item_spec_*")
    private Map<String,String> specMap;//要加上泛型,不然会报空指针...

    public Map<String, String> getSpecMap() {
        return specMap;
    }

    public void setSpecMap(Map<String, String> specMap) {
        this.specMap = specMap;
    }

猜你喜欢

转载自blog.csdn.net/weixin_40427212/article/details/84196427