使用RepositoryItemReader时触发PropertyReferenceException错误求助
问题解决:PropertyReferenceException 找不到MANIFBURENREGMANIF属性
核心原因
错误提示中的MANIFBURENREGMANIF是数据库表的列名,但Spring Data JPA的排序参数需要使用实体类的属性名而非数据库列名。你的ArticleManifeste实体类中对应的属性是manifBureauEngManif,并非数据库列名。另外还有一个隐藏问题:Repository的泛型主键类型错误,实体使用复合主键ArticleManifesteKey,但Repository定义为PagingAndSortingRepository<ArticleManifeste, String>,会导致后续主键操作异常。
具体修复步骤
1. 修正RepositoryItemReader的排序参数
将排序Map中的键从数据库列名改为实体属性名:
@Bean public RepositoryItemReader<ArticleManifeste> reader() { RepositoryItemReader<ArticleManifeste> reader = new RepositoryItemReader<>(); reader.setRepository(articleManifesteRepository); reader.setMethodName("findAll"); reader.setPageSize(100); Map<String, Direction> sorts = new HashMap<>(); // 替换为实体属性名manifBureauEngManif sorts.put("manifBureauEngManif", Direction.ASC); reader.setSort(sorts); return reader; }
2. 修正Repository的泛型主键类型
把ArticleManifesteRepository的泛型主键从String改为复合主键类ArticleManifesteKey:
@Repository public interface ArticleManifesteRepository extends PagingAndSortingRepository<ArticleManifeste, ArticleManifesteKey> { @Override Page<ArticleManifeste> findAll(Pageable pageable); }
3. 验证潜在问题
- 确认
ArticleManifesteKey类已正确实现Serializable,且@Data注解已自动生成equals()和hashCode()方法(当前代码已满足)。 - 实体类的
@IdClass注解已正确指定主键类,该配置无需修改。
修复逻辑说明
- Spring Data JPA处理排序、查询条件时,基于实体类属性名解析,而非直接使用数据库列名,否则会因找不到对应属性触发
PropertyReferenceException。 - 使用复合主键的实体,Repository的主键泛型必须匹配对应的主键类,否则Spring Data无法正确识别主键类型,引发分页、查询等操作异常。
内容的提问来源于stack exchange,提问作者mouhamed slaimi
相关产品推荐
相关产品推荐

