当前位置: 首页 > 知识库问答 >
问题:

未找到自定义基本存储库功能

冯福
2023-03-14

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

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

我的ICustomRepostory存储库接口定义如下:

@Repository
public interface ICustomRepository {
      void someCustomFunction();

}

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

现在当我使用基本存储库时:

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

当我在我的服务类中自动连线 OrdeRepository 时,它给了我编译错误:

引起:org.springframework.beans.factory.BeanCreationExc的:错误创建bean的名称'OrderRepostion'定义abc.example.在@EnableElastic搜索存储库中定义在ElkApplication声明:调用init方法失败;嵌套的异常是org.springframework.data.mapping.属性引用异常:没有找到属性为类型OrderModel!

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

共有1个答案

慕翰学
2023-03-14

将评论转换为答案

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实现,所以在引导/启动时spring会抛出错误。

因此,我们需要在ICustomRepostory中实现的定义,而不是仅仅在中实现,感谢Java8,我们也可以在接口中实现该方法

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

这段代码会很好地工作,JDK和其他代理也会在这个方法上工作,我们也可以在上应用AOP

也可以在任何使用默认@override的存储库中重写此方法。

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

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

 类似资料:
  • 我发现对于减少样板非常有用,但它似乎给工作带来了麻烦。我现在试图用自定义的基类存储库扩展,而在启动时,Spring在正确实例化存储库方面遇到了问题。 我已经尝试了几个关于这个主题的变体,但是没有运气让事情成功地连线起来。我在Spring的问题跟踪器https://jira.spring.io/browse/datajpa-674上遇到了一个类似的问题,但没有关于修复的解释,只是对代码进行了重构,使

  • 在我的项目中有几个实体具有相同的属性(对于示例'name'),所以,有可能创建一个存储库,其中使用自定义的select(实体)?因此,我从JpaRepository扩展了我的存储库,我扩展了MyCustomJpaRepository,MyCustomJpaRepository也扩展了JpaRepository,使其能够从JpaRepository授予基本功能? TKS

  • 这里的 Spring 文档 http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/repositories.html#repositories.custom-implementations 提供了将自定义功能添加到所有存储库或单个存储库的示例,而不是同时添加到两者。 假设我想向所有存储库添加一些自定义函数(使用

  • 我正在编写一个自定义Gradle插件来为所有项目添加公共资源。例如,所有微服务都使用SpringBoot web、sleuth和其他常见的依赖项。 因此,决定将创建一个独立的项目,并将插件导出为jar,然后将插件应用于其他项目。

  • 我正在遵循Spring手册为我的所有子存储库创建一个共享存储库,以在查询中提供更多功能。 然而,我得到的是“没有发现任何属性异常”基本上,我遵循步骤1.3.2,从该链接向所有存储库添加自定义行为http://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html 我试图更

  • 我有本地工作副本的SourceTree。所有操作都很好,我可以通过SourceTree进行简单的提取、推拉等操作。我只需要做一个在SourceTree中不存在的力推。 我打开终端做git推-f 我不确定什么是问题。