如何解决不使用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)。
我想我打算用SessionFactoryOptions
或ConfigurationService
做某事,但是我不知道如何在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 举报,一经查实,本站将立刻删除。