找不到类型的属性...定制Spring Data存储库
我正在尝试实现自定义的Spring存储库。 我有界面:
public interface FilterRepositoryCustom {
List filterBy(String role);
}
实现:
public class FilterRepositoryImpl implements FilterRepositoryCustom {
...
}
和“主”存储库,扩展了我的自定义存储库:
public interface UserRepository extends JpaRepository, FilterRepositoryCustom {
...
}
根据文档,我正在使用Spring Boot,并且:
默认情况下,Spring Boot将启用JPA存储库支持并查看 包(及其子包),其中@SpringBootApplication是 位于。
运行应用程序时,出现以下错误:
org.springframework.data.mapping.PropertyReferenceException:未找到针对User类型的属性filterBy!
5个解决方案
63 votes
这里的问题是您正在创建UserRepositoryImpl,但您在UserRepositoryImpl中使用它。您需要创建UserRepositoryImpl才能进行此工作。
阅读此文档以获取更多详细信息
基本上
public interface UserRepositoryCustom {
List filterBy(String role);
}
public class UserRepositoryImpl implements UserRepositoryCustom {
...
}
public interface UserRepository extends JpaRepository, UserRepositoryCustom {
...
}
参见:马特·福赛斯评论
Aman Tuladhar answered 2020-07-31T07:25:38Z
1 votes
是否必须将CustomRepository中的getStatusByCriteria(CustomCriteria criteria), CustomCriteria仅定义为
1.实体类名称-getStatusByCriteria(CustomCriteria criteria), CustomCriteria,
2.实体类属性-getStatusByCriteria(CustomCriteria criteria), CustomCriteria,此处的firstName是用户实体类的属性。
我可以没有诸如customMethod(CustomCriteria条件)之类的条件吗,条件类包含用于构造动态查询的各种属性。
例如 getStatusByCriteria(CustomCriteria criteria), CustomCriteria是用@Component注释的简单pojo,以便spring可以识别它。
当我尝试这个我得到一个错误:
org.springframework.data.mapping.PropertyReferenceException:否 属性类型为UserRepository的条件!
Vivek Vhatkar answered 2020-07-31T07:26:25Z
1 votes
如果在您的spring配置中未选择FilterRepositoryCustom的impl类,则可能发生此错误:
@EnableJpaRepositories(basePackageClasses = {RepoPackageMarker.class, FilterRepositoryCustomImpl.class})
user64141 answered 2020-07-31T07:26:45Z
-1 votes
在我的一个项目中,我遇到了同样的问题。 我通过在pom.xml中添加一行来解决了这个问题
org.apache.maven.plugins
maven-compiler-plugin
com/my/package/entities/*.java
com/my/package/repositories/*.java
com/my/package/repositories/impl/*.java
Bruno 82 answered 2020-07-31T07:27:06Z
-4 votes
旧方法:
实体aThing = repository.findOne(1L);新方法:
可选的aThing = repository.findById(1L);
Java Man answered 2020-07-31T07:27:35Z