请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

结合ElasticSearch时报错,Caused by: org.apache.ibatis.binding.BindingException

用该项目合并另一个项目,启动时不报错,运行到discussRepository.saveAll()方法会遇到如下报错:
Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.course.server.mapper.my.DiscussPostRepository.saveAll

是结合ElasticSearch时报错,DiscussPostRepository是:

/*
ElasticsearchRepository:父接口,其中已经事先定义好了对es服务器访问的增删改查各种方法。Spring会给它自动做一个实现,我们直接去调就可以了。
*/
@Repository
public interface DiscussPostRepository extends ElasticsearchRepository<DiscussPost, String> {

}

,它不需要有.xml的写sql的文件,另一个项目就可以正常运行。不知道为什么结合到这个项目会报这个错。
我使用的ElasticSearch都是<elasticsearch.version>7.12.0</elasticsearch.version>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
	<version>2.4.3</version>
</dependency>

mybatis都是:

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.3</version>
</dependency>

求答,谢谢老师。


在尝试解决这个问题时遇到了另一个问题,@Mapper+@Repository无法把Mapper接口注入,会报错Consider defining a bean of type ‘XXX’ in your configuration.,必须通过@MapperScan才能注入,不知道为什么。


看网上说,可以通过@EnableElasticsearchRepositories(basePackages = "com.course.server.mapper.my.elasticsearch")来解决第一个问题,但是使用该注释会启动时出现如下报错:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘discussPostRepository’: FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException。


如果我不把DiscussPostRepository类放在mapper目录下,而是放在config目录下,并且不加@EnableElasticsearchRepositories注释,那么会启动时出现Consider defining a bean of type ‘XXX’ in your configuration.报错。


调试时可以看出DiscussPostRepository的区别,第二张图是正确的。
图片描述
图片描述

正在回答 回答被采纳积分+3

2回答

提问者 慕容7407587 2022-04-08 22:40:11
这个报错解决啦:elasticsearch ElasticsearchRepository Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.course.server.mapper.my.elasticsearch.DiscussPostRepository.saveAll。结合ElasticSearch时报错,Caused by: org.apache.ibatis.binding.BindingException-慕课网  https://coding.imooc.com/learn/questiondetail/g5J7RPqBLNNY8Zw1.html。

具体解决:
1、启动类上写这些,不要写一样的注释来重复扫描:
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan({"com.course.server.mapper.generator","com.course.server.mapper.my"})
@EnableElasticsearchRepositories(basePackages = "com.course.server.mapper.elasticsearch")
@ComponentScan(value = {"com.course.server"}) //不加这个会不扫描server模块的Bean
2、配置文件mybatis写这样,扫描全部xml文件(ElasticsearchRepository没有xml文件,所以直接扫描全部xml就好):
mybatis.mapper-locations=classpath*:/mapper/**/*.xml


1 回复 有任何疑惑可以回复我~
甲蛙 2022-04-08 21:51:36
这个得自己调试了,我好多年没用elasticsearch了
下载视频          
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信