Java报TypeMismatchException错误:Hires实体id预期Integer却得到String如何解决
问题原因
你错误调用了JPA Repository的主键查询方法:
Hires实体中被@Id标注的主键字段是int类型的id,Spring Data JPA自带的findById()方法要求入参必须和主键类型匹配,也就是需要传入Integer/int类型的参数- 你现在传的是
String类型的hid参数,和主键要求的Integer类型不匹配,直接触发类型不匹配异常
修复方法
选其中一种即可:
方法一:新增按hid查询的自定义方法
在你的HiresRepository接口里加一行代码:
Optional<Hires> findByHid(String hid);
然后把业务层的调用逻辑改成用这个自定义方法:
public Optional<Hires> getHireById(String hid) { return hr.findByHid(hid); }
方法二:调整主键配置
如果你业务上实际是用hid作为唯一主键的,直接把@Id注解放到hid字段上,调整实体字段注解:
@Id @GeneratedValue(strategy = GenerationType.UUID) // 替换为你实际的hid生成策略 @Column(unique = true) private String hid; // 原id字段去掉@Id注解 private int id;
调整后自带的findById()方法就会要求传入String类型参数,你现有的调用逻辑不需要额外修改就可以正常运行。
内容的提问来源于stack exchange,提问作者ConfusedCitizen
相关产品推荐
相关产品推荐

