7

Я пытаюсь настроить Hibernate. Но когда я пытаюсь создать свою фабрику Session, с этим кодом:Hibernate - Ошибка активации интеграции проверки бина

Configuration configuration = new Configuration(); 
configuration.configure(); 
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();   
sessionFactory = configuration.buildSessionFactory(serviceRegistry); 

Я получаю ошибку:

org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration 
     at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:156) 
     at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:303) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
     at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
    Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider; 
     at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:113) 
     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) 
     at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:445) 
     at org.hibernate.cfg.beanvalidation.TypeSafeActivator.activate(TypeSafeActivator.java:96) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:150) 
     ... 31 more 

У меня есть гибернации-валидатор и бобовый валидатор в моем классе-пути (см скриншот) enter image description here

В чем могут быть проблемы?

Редактировать У меня было два дополнительных validation-api на пути к классам, но они были исключены. Может быть, это как-то проблема. Может быть, scope = предоставлен?

<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-user</artifactId> 
    <version>${gwtVersion}</version> 
    <scope>provided</scope> 
    <exclusions> 
     <exclusion> 
      <artifactId>validation-api</artifactId> 
      <groupId>javax.validation</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

<dependency> 
    <groupId>com.google.web.bindery</groupId> 
    <artifactId>requestfactory-server</artifactId> 
    <version>2.5.1</version> 
    <exclusions> 
     <exclusion> 
      <artifactId>validation-api</artifactId> 
      <groupId>javax.validation</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Edit 2

Решена проблема: у меня был еще один боб валидатор банка в пути к классам. Но не от maven, так что я этого не осознавал. Удаление, которое решило проблему. Большое спасибо за подсказки!

+1

С помощью 'NoSuchMethodError', я бы исследовал проблемы с версиями библиотек/jvm (что вы используете такую ​​старую библиотеку, чтобы она не предоставляла ожидаемый метод). – SJuan76

+0

... жесткие версии, указанные в пути к классам, должны соответствовать (1.1.0 является последней версией библиотеки) – SJuan76

+1

Уверены, что у вас нет версии API BeanValidation 1.0 на пути к классам. В Bvean Validation 1.0 нет _ParameterNameProvider_, поэтому это объясняет ошибку. – Hardy

ответ

4

NoSuchMethodError указывает, что вы загрузили неправильную версию jar, у которой нет метода, названного вами, который вы использовали.
Я настоятельно рекомендую вам использовать hibernate 4.0 или немного ниже, которые, как оказалось, более стабильны для трансплантации.

Смежные вопросы