Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于Bean验证API,启动Hibernate验证程序时出现问题_Java_Hibernate_Maven_Hibernate Validator - Fatal编程技术网

Java 由于Bean验证API,启动Hibernate验证程序时出现问题

Java 由于Bean验证API,启动Hibernate验证程序时出现问题,java,hibernate,maven,hibernate-validator,Java,Hibernate,Maven,Hibernate Validator,我试图在我的项目中使用Hibernate验证器,但它不起作用。在以下行: SessionFactory sessions = config.buildSessionFactory(builder.build()); 我得到以下例外情况: org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration at org.hibernate.cfg.beanv

我试图在我的项目中使用Hibernate验证器,但它不起作用。在以下行:

SessionFactory sessions = config.buildSessionFactory(builder.build());
我得到以下例外情况:

org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:154)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:311)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
    at net.myProject.server.util.HibernateUtil.<clinit>(HibernateUtil.java:32)
    ... 36 more
Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
    at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:119)
    at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45)
    at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:217)
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
org.hibernate.cfg.beanvalidation.IntegrationException:激活Bean验证集成时出错
位于org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:154)
位于org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:311)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
位于net.myProject.server.util.HibernateUtil.(HibernateUtil.java:32)
... 36多
原因:java.lang.NoSuchMethodError:javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
位于org.hibernate.validator.internal.engine.validatoryImpl.(validatoryImpl.java:119)
位于org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45)
位于org.hibernate.validator.internal.engine.configurationmpl.buildValidatorFactory(configurationmpl.java:217)
位于javax.validation.validation.buildDefaultValidatorFactory(validation.java:111)
我发现这和我的问题很相似。他把他的解决方案描述为

我在类路径中还有另一个bean验证程序jar。但不是来自 maven,所以我没有意识到。解决了这个问题

我想我的问题也一样。上面写着:

这可以传递地将依赖关系拉入Bean验证API (javax.validation:validationAPI:1.1.0.Final)

这一定是导致此问题的原因,因为恢复到旧版本(4.3.1.Final)可修复此问题。有没有办法强制Hibernate不引入Bean验证API

编辑:我试图排除javax验证api:

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.0.3.Final</version>
      <exclusions>
          <exclusion>
              <groupId>javax.validation</groupId>
              <artifactId>validation-api</artifactId>
          </exclusion>
      </exclusions>
  </dependency>

org.hibernate
休眠验证器
5.0.3.4最终版本
javax.validation
验证api

但它似乎没有任何效果。

尝试将此依赖项添加到pom.xml中

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.0.0.GA</version>
</dependency>

javax.validation
验证api
1.0.0.GA

如果不考虑使用HiBealNealValtual4.2.0.Calm,我的配置中有一个,它工作正常。

< P>删除这个jar >代码> javax。验证:验证API:1.1.0.最后< /C>解决了我的问题。
确保您只有一个验证jar。如果我们有两个罐子,那么它们可能会冲突导致错误

对我来说,1.1.0.Final版本javax.validation.validation-api已经成功了。因为1.1.0.Final的javax.validation.spi.ConfigurationState接口具有getParameterNameProvider方法,这在1.0.0.GA中是不存在的

我在pom.xml中添加了以下依赖项

<dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
           <scope>test</scope>
</dependency>

javax.validation
验证api
1.1.0.1最终版本
测试

在我的例子中,我刚刚删除了hibernate验证器,它工作了。(我还有一个验证api和hibernate验证器的组合,并尝试了所有操作)或者您可以转到maven存储库-->org,然后删除hibernate文件夹,再次重建项目。。
希望能有所帮助。

我想解释一下这里发生的事情会很有用

Hibernate正在呼叫:

ValidatorFactoryImpl.java

public ValidatorFactoryImpl(ConfigurationState configurationState) {
   ...
   configurationState.getParameterNameProvider()
   ...
}
您可以找到
getParameterNameProvider
的文档:

getParameterNameProvider
getParameterNameProvider()

返回此配置的参数名提供程序

返回:

参数名称提供程序实例或null(如果未定义)

自:

1.1

那有什么问题?问题是这种方法并不总是存在。它是在将来的某个时候添加的

创建接口时的规则是,它们是在具体的环境中设置的:您永远都不能更改接口。相反,JavaX验证器改变了ConfigurationState接口,并在过去几年中添加了一些新方法

java验证代码正在向Hibrate传递一个过时的ConfiguationState接口;未实现所需接口的接口


您需要确保javax.validation.validation.buildDefaultValidatorFactory更新为支持1.1版。

转到Dependences项目,删除hibernate.validator,并在最新版本中重新安装。它为我解决了问题。

我又遇到了问题。我就是这样解决的:

1-从“web”依赖项中排除spring.validator:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

org.springframework.boot
SpringBootStarterWeb
org.hibernate.validator
休眠验证器
2-插入与以前版本的依赖关系后:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.1.3.Final</version>
    </dependency>

org.hibernate
休眠验证器
5.1.3.最终版本

这很有效!在Hibernate Validator站点上,对于5.0.3.Final,它说:
这会过渡地将依赖性拉入Bean验证API(javax.Validation:Validation API:1.1.0.Final)。
我认为这一定是问题所在,因为更改版本似乎已经解决了它。你知道强迫它不拉Bean验证api是可能的吗?我用5.0.3.Final就可以做到这一点。通过向javax.validation:validation api 1.1.0.Final添加依赖项,并确保将此依赖项放在hibernate validatory依赖项之前,它将无法正常工作。当你为我指出正确的方向时,接受你的答案。哦,太好了,有时候游戏中会输入依赖项的顺序,在其他情况下,添加依赖项以避免下载不需要的依赖项是很方便的。我尝试过排除,但没有任何效果。无论如何,也许现在你也可以从4开始