一尘不染

找不到类型的属性…定制的Spring Data存储库

spring

我正在尝试实现自定义Spring存储库。我有界面:

public interface FilterRepositoryCustom {
    List<User> filterBy(String role);
}

实现:

public class FilterRepositoryImpl implements FilterRepositoryCustom {
...
}

和“主”存储库,扩展了我的自定义存储库:

public interface UserRepository extends JpaRepository<User, String>, FilterRepositoryCustom {
...
}

根据文档,我正在使用Spring Boot :

默认情况下,Spring Boot将启用JPA存储库支持并在@SpringBootApplication所在的包(及其子包)中查找。

运行我的应用程序时,出现以下错误:

org.springframework.data.mapping.PropertyReferenceException:未找到针对User类型的属性filterBy!


阅读 472

收藏
2020-04-16

共1个答案

一尘不染

这里的问题是你正在创建,FilterRepositoryImpl但正在中使用它UserRepository。你需要进行创建UserRepositoryImpl才能完成这项工作。

阅读此文档以获取更多详细信息

基本上

public interface UserRepositoryCustom {
    List<User> filterBy(String role);
}

public class UserRepositoryImpl implements UserRepositoryCustom {
...
}

public interface UserRepository extends JpaRepository<User, String>, UserRepositoryCustom {
...
}

Spring Data 2.x更新
此答案是为Spring 1.x编写的。正如Matt Forsythe指出的那样,命名期望随着Spring Data 2.0的改变而改变。实现从更改the-final-repository-interface-name-with-an-additional-Impl-suffixthe-custom-interface-name-with-an-additional-Impl-suffix

因此,在这种情况下,实现的名称为:UserRepositoryCustomImpl

2020-04-16