【问题标题】:Problems with Entity validation with Hibernate Validator使用 Hibernate Validator 进行实体验证的问题
【发布时间】:2021-09-14 11:37:27
【问题描述】:

我尝试通过 Hibernate Validator 激活自动实体验证。因此,我在我的 Gradle 构建文件中添加了以下依赖项:

implementation 'org.hibernate.validator:hibernate-validator:7.0.1.Final'
implementation 'org.hibernate.validator:hibernate-validator-cdi:7.0.1.Final'
implementation 'org.hibernate.validator:hibernate-validator-annotation-processor:7.0.1.Final'
implementation 'org.glassfish:jakarta.el:4.0.1'

启动我的应用程序时,在构建会话工厂时,抛出以下错误:

java.lang.ClassNotFoundException: javax.validation.ValidatorFactory

我能够通过 Hibernate 实现准确地调试自己到异常的来源。由于我使用的是 Hibernate Validator 的最新实现,因此我知道命名空间已从 javax.* 移动到 jakarta.*。但是,BeanValidationIntegrator.java 中的这段代码似乎加载了一个依赖于来自javax.* 的一些旧(?)验证包的类:

// see if the Bean Validation API is available on the classpath
    if ( isBeanValidationApiAvailable( classLoaderService ) ) {
        // and if so, call out to the TypeSafeActivator
        try {
            final Class typeSafeActivatorClass = loadTypeSafeActivatorClass( classLoaderService );
            @SuppressWarnings("unchecked")
            final Method activateMethod = typeSafeActivatorClass.getMethod( ACTIVATE_METHOD_NAME, ActivationContext.class );

我能够让我的 IDE 向我显示加载的 typeSafeActivatorClass 的源代码,并看到它确实依赖于 javax.validation.*

所以我将所需的依赖项添加到我的构建文件 (javax.validation:validation-api:2.0.1.Final) 并测试验证现在是否可以工作,我将以下属性添加到我的 Hibernate 配置中:

jakarta.persistence.validation.mode=callback

很遗憾,我收到一个错误,指出没有可用的 bean 验证实现。

任何帮助将不胜感激!

【问题讨论】:

    标签: hibernate jpa gradle jakarta-ee hibernate-validator


    【解决方案1】:

    正如您在release announcement of Hibernate 5.5.0 中所读到的,您必须使用带有-jakarta 工件ID 后缀的休眠工件。看来你没有这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多