You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HV000028: isValid调用异常 自定义校验器中@Autowired注入UserRepository为null

问题根因

你在控制器层用@Valid做参数校验时,使用的是Spring容器托管的校验器实例,所以UserRepository可以正常注入。但JPA的save操作默认会在执行持久化前再触发一次实体校验,这一轮校验的校验器是Hibernate Validator自行实例化的,不受Spring容器管理,因此@Autowired注解不会生效,注入的UserRepository就为null,最终抛出HV000028异常。

解决方案

方案1:关闭JPA自动校验(推荐)

你已经在控制器层做了参数校验,JPA层的重复校验没有必要,直接关闭即可,改造成本最低。
在application.properties配置文件中添加如下配置:

spring.jpa.properties.javax.persistence.validation.mode=none

如果是yml格式配置:

spring:
  jpa:
    properties:
      javax:
        persistence:
          validation:
            mode: none

方案2:配置JPA使用Spring托管的校验器

如果需要保留JPA层的校验能力,就需要把Spring管理的校验器注入到JPA配置中,让JPA校验时也使用Spring创建的校验器实例,保证依赖注入正常生效。
新增校验配置类即可:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import javax.validation.Validator;

@Configuration
public class ValidationConfig {

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }

    @Bean
    public HibernatePropertiesCustomizer hibernatePropertiesCustomizer(Validator validator) {
        return hibernateProperties -> hibernateProperties.put("javax.persistence.validation.factory", validator);
    }
}

两种方案任选其一即可生效,优先选择方案1,可避免不必要的重复校验逻辑,提升接口性能。

内容的提问来源于stack exchange,提问作者Leotrim Vojvoda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:42:01