调用UserRepository报类型参数'S'超出边界需继承UserEntity如何解决
错误原因
- 你的
UserRepository继承JpaRepository时指定的实体泛型为UserEntity,因此JpaRepository内置的save方法仅接收UserEntity类或其子类的实例作为入参 - 你当前在
UserServiceImpl的saveUser方法中直接将User类型的参数传给userRepository.save(),User类不属于UserEntity的子类,不符合泛型边界约束,因此触发报错
解决方法
你需要先将入参的User对象转换为UserEntity类型后再调用save方法,修改后的saveUser逻辑参考如下:
@Override public User saveUser(final User user) { // 先将传入的User对象转换为JPA要求的UserEntity实体 UserEntity toSaveEntity = objectMapper.convertValue(user, UserEntity.class); UserEntity savedEntity = userRepository.save(toSaveEntity); // 将保存后返回的实体再转换为User类型返回给上层 return objectMapper.convertValue(savedEntity, User.class); }
补充说明:如果
User和UserEntity的字段命名、结构差异较大,ObjectMapper自动转换可能会出现字段映射错误,你也可以选择手动写字段赋值逻辑,或者使用MapStruct等实体转换工具实现更可靠的类型转换。
内容的提问来源于stack exchange,提问作者Clancinio
相关产品推荐
相关产品推荐

