未找到自定义基本存储库函数

kfgdxczn  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(326)

我的通用基本存储库定义如下:

@NoRepositoryBean
public interface IBaseRepository<Template extends BaseModel, Id > extends 
                            ElasticsearchRepository<Template,Id>, ICustomRepository{
}

我的icustomrepository接口定义如下:

@Repository
public interface ICustomRepository {
      void someCustomFunction();

}

public class CustomRepositoryImpl implements ICustomRepository{
    @Override
    void someCustomFunction(){
    }
}

现在,当我将baserepository用作:

@Repository
public interface OrderRepository extends BaseRepository<OrderModel,Long>{
}

当我在我的服务类中自动连接orderepository时,它会给出编译错误:
原因:org.springframework.beans.factory.beancreationexception:创建名为'orderrepository'的bean时出错,该bean在.example.orderrepository中定义,在elkapplication上声明@enablelasticsearchrepositories:init方法调用失败;嵌套异常为org.springframework.data.mapping.propertyreferenceexception:找不到类型ordermodel的属性somecustomfunction!
有人能告诉我哪里出了问题,怎么解决吗?

esbemjvw

esbemjvw1#

将注解转换为答案
icustomrepo公司

@Repository
public interface ICustomRepository {
      void someCustomFunction();

}

ibaserepository公司

@NoRepositoryBean
public interface IBaseRepository<Template extends BaseModel, Id > extends 
                            ElasticsearchRepository<Template,Id>, ICustomRepository{
}

订单存储库

@Repository
public interface OrderRepository extends IBaseRepository<OrderModel,Long>{
}

orderrepository是一个存储库接口,bean是由Springbean处理器创建的,但是 OrderRepository 不执行 someCustomFunction 甚至spring也不知道它的实现,除非它知道它已经被 CustomRepositoryImpl 所以在引导/启动时,spring抛出了一个错误。
因此,与其仅仅定义 someCustomFunction 我们需要把这个落实到 ICustomRepository ,由于Java8,我们也可以在接口中实现该方法

@Repository
public interface ICustomRepository {
     default void someCustomFunction() {
        // some code here
     }
}

这段代码可以很好地工作,jdk和其他代理也可以在这个方法上工作,我们也可以在上面应用aop someCustomFunction .
如果同时使用 default 以及 @Override .

@Repository
public interface OrderRepository extends IBaseRepository<OrderModel,Long>{

   @Override
   default void someCustomFunction() {
        // some code here
   }
}

相关问题