Java 由于Bean验证API,启动Hibernate验证程序时出现问题
我试图在我的项目中使用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
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开始