2013-03-15 142 views
2

四处错误:休眠无法找到默认提供

org.hibernate.HibernateException: Error applying BeanValidation relational constraints 
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:219) 
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:126) 
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:301) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744) 


Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:208) 
... 207 more 
Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:524) 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:119) 
    ... 212 more 
Caused by: javax.validation.ValidationException: Unable to find a default provider 
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264) 
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:521) 

休眠有关行家的conf:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.1.5.SP1</version> 
     <scope>compile</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>dom4j</groupId> 
       <artifactId>dom4j</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>net.sourceforge.jtds</groupId> 
     <artifactId>jtds</artifactId> 
     <version>1.2.4</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.2.0.Final</version> 
     <scope>compile</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
     <scope>compile</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator-annotation-processor</artifactId> 
     <version>4.3.1.Final</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.google.code.findbugs</groupId> 
     <artifactId>jsr305</artifactId> 
     <version>1.3.9</version> 
     <scope>compile</scope> 
    </dependency> 

建议,我发现是:

  1. 使用Hibernate 4+
  2. 用户休眠验证4+
  3. 添加Hibernate验证库
  4. 添加JSR305(IMO并没有真正物)
  5. 添加的javax验证库
  6. 添加Hibernate验证器的注释处理器

我的所有,但仍然得到错误。

编辑:

显示我如何使用我的休眠。

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property> 
     <property name="hibernate.connection.pool_size">5</property> 
     <property name="show_sql">false</property> 
     <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> 
     <property name="hibernate.current_session_context_class">thread</property> 


     <mapping class="com.foo.bar.MyClass /> 
    </session-factory> 
</hibernate-configuration> 

大厦:

private static SessionFactory buildSessionFactory() { 

    try { 
     // Create the SessionFactory from hibernate.cfg.xml 
     Configuration configuration = new Configuration(); 
     configuration.configure(); 

     configuration.setNamingStrategy(ImprovedNamingStrategy.INSTANCE); // also other configuration changes made here 

     serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); 

     return configuration.buildSessionFactory(serviceRegistry); // this line gives the error 


    } catch (Throwable ex) { 
     // Make sure you log the exception, as it might be swallowed 
     log.error("Initial SessionFactory creation failed.", ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
} 
+0

你有验证api-1.0.0.GA.jar以及?如果是的话,删除它。 – 2013-03-15 13:07:53

+0

我删除了该库,这是在我的POM中,但仍然是同一个问题... – Jaanus 2013-03-15 13:15:08

+0

K只是一个想法尝试将休眠验证程序更改为4.1.0? – 2013-03-15 13:17:47

回答

3

关于你提到的6分:

  • 使用Hibernate 4+
  • 用户冬眠验证4+

Hibernate验证4.x版是参考实现对Bean验证的认识。这是使用的正确版本。它集成在休眠4.所以版本似乎是正确

  • 添加Hibernate验证库

是的,这是必需的,你这样做,通过添加休眠-验证依赖。

  • 添加JSR305(IMO并没有真正物)

没有关系的。甚至不知道JSR是什么。

  • 添加的javax验证库

你这样做明确的,但同时又是一个传递依赖于休眠,验证所以你会得到他们任何一种方式。

  • 添加Hibernate验证器的注释处理器

不,这不是必需/相关

那么,为什么它不工作?我想回答这个问题我们需要更多的信息。异常暗示javax.validation.Validation无法看到/加载Hibernate Validator Bean验证提供程序。你是否在受限制的班级工作?你如何使用所有这些依赖关系?

+0

我编辑了我的第一篇文章,它显示了我如何初始化hibernate(使用依赖关系)。 – Jaanus 2013-03-17 17:40:44

+0

但是你在哪里运行代码?在Java SE应用程序中? Web应用程序?耳?你正在使用哪个容器? – Hardy 2013-03-18 09:40:48

+0

tomcat中的Web应用程序。 – Jaanus 2013-03-18 09:42:54