我正在尝试实现自定义Spring存储库。我有界面:
public interface FilterRepositoryCustom {
List<User> filterBy(String role);
}
实施:
public class FilterRepositoryImpl implements FilterRepositoryCustom {
...
}
和“main”存储库,扩展了我的自定义存储库:
public interface UserRepository extends JpaRepository<User, String>, FilterRepositoryCustom {
...
}
我正在使用Spring Boot,根据docs:
默认情况下,Spring Boot将启用JPA存储库支持并查看 @SpringBootApplication所在的包(及其子包) 位于。
当我运行我的应用程序时,我收到此错误:
org.springframework.data.mapping.PropertyReferenceException:找不到类型User的属性filterBy!
答案 0 :(得分:52)
此处的问题是您正在创建 FilterRepositoryImpl
,但您正在 UserRepository
中使用它。您需要创建 UserRepositoryImpl
才能使其发挥作用。
基本上
public interface UserRepositoryCustom {
List<User> filterBy(String role);
}
public class UserRepositoryImpl implements UserRepositoryCustom {
...
}
public interface UserRepository extends JpaRepository<User, String>, UserRepositoryCustom {
...
}
答案 1 :(得分:1)
如果在您的spring配置中未选择FilterRepositoryCustom的impl类,则可能发生此错误:
@EnableJpaRepositories(basePackageClasses = {RepoPackageMarker.class, FilterRepositoryCustomImpl.class})
答案 2 :(得分:1)
对我来说,钥匙是
关注您的春季版本的文档 https://docs.spring.io/spring-data/data-commons/docs/2.3.4.RELEASE/reference/html/#repositories
因此我有:
@NoRepositoryBean
public interface SliceRepository<T, ID> extends JpaRepository<T, ID> {..}
public class SliceRepositoryImpl<T, ID> extends SimpleJpaRepository<T, ID> implements SliceRepository<T, ID> {..}
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
basePackages = {"com.some.servicename.repository"},
repositoryBaseClass = SliceRepositoryImpl.class
)
答案 3 :(得分:0)
在我的一个项目中,我遇到了同样的问题。我通过在 pom.xml
中添加一行来解决该问题<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<includes>
<include>com/my/package/entities/*.java</include>
<include>com/my/package/repositories/*.java</include>
<include>com/my/package/repositories/impl/*.java</include> <!-- add this -->
</includes>
</configuration>
</plugin>
答案 4 :(得分:0)
CustomRepository中的customMethod()
是否只能定义两个参数?
1。实体类名称-customMethod(User user)
,
2.Entity类属性-customMethod(String firstName)
,此处的firstName是User Entity类的属性。
我不能拥有诸如customMethod(CustomCriteria条件)之类的条件,条件类包含用于构造动态查询的各种属性。
例如getStatusByCriteria(CustomCriteria criteria), CustomCriteria
是用@Component注释的简单pojo,以便spring可以识别它。
尝试此操作时出现错误:
org.springframework.data.mapping.PropertyReferenceException:否 属性类型为UserRepository的条件!
答案 5 :(得分:0)
我有同样的问题。请检查您的包裹结构是否像这样
custom
impl
- FilterRepositoryCustomImpl.class
- FilterRepositoryCustom.class
因为当我尝试使用自定义存储库时,看不到实现。 (该实现应该在相同的程序包中或在子程序包中,以便Spring可以看到它)
也许对某人有帮助(ノ^∇^)
答案 6 :(得分:0)
我也有这个错误。这是因为我已经配置了 elasticSearch 存储库机智包
@EnableElasticsearchRepositories("some.package")
接下来我将 MyElasticSearchRepository 从包 'some.package' 移动到另一个包,但没有更改配置
答案 7 :(得分:-2)
旧方法:
实体aThing = repository.findOne(1L); 新方法:
可选的aThing = repository.findById(1L);