找不到自定义基础存储库功能

Custom Base repository function not found

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

@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 时 class 它给我编译错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'OrderRepository ' defined in abc.example.OrderRepository defined in @EnableElasticsearchRepositories declared on ElkApplication: Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property someCustomFunction found for type OrderModel!

有人可以建议这里出了什么问题以及如何解决这个问题吗?

正在将评论转换为答案

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 是由 spring bean 处理器创建的,但是这个 OrderRepository 没有实现 someCustomFunction,甚至 spring 也不知道它的实现除了它知道它已经被 CustomRepositoryImpl 实现所以在 bootstrap/startup spring 抛出一个错误。

因此,我们需要在 ICustomRepository 中实现它,而不仅仅是 someCustomFunction 的定义,多亏了 Java 8,我们也可以在接口中实现该方法

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

此代码可以正常工作,JDK 和其他代理也可以使用此方法,我们也可以在 someCustomFunction.

上应用 AOP

如果还使用 default@Override.

,也可以在任何存储库中覆盖此方法
@Repository
public interface OrderRepository extends IBaseRepository<OrderModel,Long>{

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