微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不使用Spring Boot LocalValidatorFactoryBean进行休眠验证

如何解决不使用Spring Boot LocalValidatorFactoryBean进行休眠验证

我遇到一个问题,当spring.jpa.properties.javax.persistence.validation.mode设置为auto认)时,它将尝试验证我的实体,这很棒。但是,我有一些自定义的ConstraintValidator,它们依赖于通过构造函数自动关联到它们的依赖项。结果我得到了错误

Caused by: javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: project.CustomValidator.

这是因为:

Caused by: java.lang.NoSuchMethodException: project.CustomValidator.<init>()

由于我的依赖项是通过构造函数注入的,因此没有0 arity构造函数

当我像这样创建Spring Boot的配置时:

@Configuration
open class ValidationContext {
    @Bean
    open fun validator(): Validator {
        return LocalValidatorfactorybean()
    }
}

Spring Boot验证器工厂工作正常,并且没有实例化我的自定义ConstraintValidator的问题。但是,Hibernate不使用该工厂。而是调用Validation.buildDefaultValidatorFactory()(请参阅code)。

我想我打算用SessionFactoryOptionsConfigurationService做某事,但是我不知道如何在Spring Boot中进行配置。

如何让Hibernate使用LocalValidatorfactorybean实例?

解决方法

技巧是使用HibernatePropertiesCustomizer指定要使用的验证工厂。像这样:

@Bean
open fun hibernatePropertiesCustomizer(validator: Validator): HibernatePropertiesCustomizer {
    return HibernatePropertiesCustomizer { properties: MutableMap<String,Any> -> properties["javax.persistence.validation.factory"] = validator }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。