找不到自定义基础存储库功能
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
}
}
我有如下定义的通用基础存储库:
@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
.
如果还使用 default
和 @Override
.
@Repository
public interface OrderRepository extends IBaseRepository<OrderModel,Long>{
@Override
default void someCustomFunction() {
// some code here
}
}