继承ElasticSearchRepository抛org.apache.ibatis.binding.BindingException: Invalid bound statement
es资源库继承ElasticSearchRepository调用封装的API时总是抛出org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),mybatis异常,Google了一下也总是找不到重点,结果都是和xml映射文件不匹配,方法名称不一致等有关mybatis问题。于是乎就一步步追踪源码,e
es资源库继承ElasticSearchRepository调用封装的API时总是抛出org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),mybatis异常,Google了一下也总是找不到重点,结果都是和xml映射文件不匹配,方法名称不一致等有关mybatis问题。
于是乎就一步步追踪源码,es资源库层层继承,里面都封装了可供操作的API
@Component
public interface BookRepository extends ElasticsearchRepository<Book,String> {}
@NoRepositoryBean
public interface ElasticsearchRepository<T, ID extends Serializable> extends ElasticsearchCrudRepository<T, ID>{
<S extends T> S index(S entity);
.......
}
@NoRepositoryBean
public interface ElasticsearchCrudRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>{}
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort var1);
Page<T> findAll(Pageable var1);
}
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S var1);
.......
}
最终进AbstractElasticsearchRepository抽象类找到了我要调用的save()API,AbstractElasticsearchRepository实现了ElasticSearchRepository接口,是所有es提供的API的方法实现类
在此处我打了断点,但是很明显断点的显示不太对,debug走起时果然没有进来
断点进不了源码,可能是es资源库没有被注入,所以当调用save()API时,没有被识别为esRepository,才会报mybatis异常
springboot怎么把ElasticsearchRepository注入进来呢?求助万能的google终于找到答案,只需在启动类中添加一个注解即可,basePackages是es资源库所在包
@EnableElasticsearchRepositories(basePackages = "com.jdy2018.shop.entity.dao.mdc.es")
困扰了好几天,付出几根白头发的代价终于解决了
更多推荐
所有评论(0)