【发布时间】:2020-12-16 08:37:24
【问题描述】:
我遇到了一个问题,当 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)。
我想我打算用 SessionFactoryOptions 或 ConfigurationService 做点什么,但我不知道如何在 Spring Boot 中配置它。
如何让 Hibernate 使用 LocalValidatorFactoryBean 实例?
【问题讨论】:
标签: java spring-boot hibernate kotlin hibernate-validator