7

Tôi đang cố thiết lập Hibernate. Nhưng khi tôi cố gắng để tạo Factory phiên tôi, với mã này:Hibernate - Lỗi khi kích hoạt tích hợp Xác thực Bean

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

tôi nhận được lỗi:

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 

Tôi có hibernate-validator và validator đậu ở đẳng cấp con đường của tôi (xem ảnh chụp màn hình) enter image description here

Điều gì có thể là vấn đề ở đây?

Chỉnh sửa Tôi có hai xác nhận bổ sung-api trên đường dẫn lớp, nhưng loại trừ chúng. Có thể họ là một vấn đề bằng cách nào đó. Có thể phạm vi = được cung cấp?

<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> 

Chỉnh sửa 2

Giải quyết được vấn đề: Tôi vẫn chưa khác jar validator đậu trong đường dẫn lớp. Nhưng không phải từ maven, vì vậy tôi đã không nhận ra nó. Việc xóa đã giải quyết được sự cố. Cảm ơn rất nhiều cho các gợi ý!

+1

Bằng 'NoSuchMethodError', tôi sẽ điều tra các vấn đề với các phiên bản của thư viện/jvm (bạn đang sử dụng thư viện quá cũ nên không cung cấp phương thức dự kiến). – SJuan76

+0

... khó khăn các phiên bản được hiển thị trong classpath phải phù hợp (1.1.0 là thư viện phát hành cuối cùng) – SJuan76

+1

Bạn có chắc chắn rằng bạn không có phiên bản API BeanValidation 1.0 trên classpath không. Trong Bvean Validation 1.0 không có _ParameterNameProvider_, do đó sẽ giải thích được lỗi. – Hardy

Trả lời

4

NoSuchMethodError cho biết rằng bạn đã tải phiên bản không hợp lệ của lọ không có phương thức có tên như bạn đã sử dụng.
Tôi rất khuyên bạn nên sử dụng hibernate 4.0 hoặc thấp hơn một chút mà hóa ra là ổn định hơn để cấy ghép.

Các vấn đề liên quan