我正在尝试实现自定义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!
这里的问题是你正在创建,FilterRepositoryImpl但正在中使用它UserRepository。你需要进行创建UserRepositoryImpl才能完成这项工作。
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-suffix为the-custom-interface-name-with-an-additional-Impl-suffix。
the-final-repository-interface-name-with-an-additional-Impl-suffix
the-custom-interface-name-with-an-additional-Impl-suffix
因此,在这种情况下,实现的名称为:UserRepositoryCustomImpl。
UserRepositoryCustomImpl