我有通用的基本存储库定义如下:
@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!
有人可以建议这里出了什么问题以及如何解决这个问题吗?
将评论转换为答案
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 我不确定什么是问题。