创建bean会话出错ErrorFactory

问题描述:

我将Spring与Hibernate集成在一起。但是,当我运行该应用程序时,出现如下错误:创建bean会话出错ErrorFactory

在类路径资源[resources/spring.xml]中定义名称为'sessionFactory'的bean时创建错误:调用init方法失败;嵌套的例外是org.hibernate.HibernateException:无法获取默认的Bean验证工厂

我spring.xml样子:

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="org.postgresql.Driver" /> 
    <property name="url" value="jdbc:postgresql://localhost:5432/3encult" /> 
    <property name="password" value="3encult" /> 
    <property name="username" value="3encult" /> 
</bean> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource" /> 
    <property name="mappingResources"> 
     <list> 
      <value> 
       resources/User.hbm.xml 
       <!-- Project.hbm.xml ProjCF.hbm.xml Task.hbm.xml TaskCF.hbm.xml Category.hbm.xml 
        TaskEstimation.hbm.xml ProjectEstimation.hbm.xml Parameter.hbm.xml StatisticTool.hbm.xml 
        Report.hbm.xml --> 
      </value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
      <!-- Especificamos el valor minimo del pool de conexiones --> 
      <prop key="hibernate.c3p0.minPoolSize">5</prop> 
      <!-- Especificamos el valor maximo del pool de conexiones --> 
      <prop key="hibernate.c3p0.maxPoolSize">20</prop> 
      <!-- El tiempo de vida de cada conexion del pool. --> 
      <prop key="hibernate.c3p0.timeout">600</prop> 

     </props> 
    </property> 
</bean> 

<bean id="myUserDAO" class="main.java.com.gwt.app.server.User"> 
    <property name="sesionFactory" ref="sessionFactory" /> 
</bean> 
</beans> 

,并在类用户的注入是:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"resources/spring.xml"}); 

public void setSesionFactory(SessionFactory sesionFactory){ 
    this.sesionFactory = sesionFactory; 
    this.sesion = this.sesionFactory.openSession(); 
} 

堆栈跟踪是:

Error creating bean with name 'sessionFactory' defined in class path resource [resources/spring.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Unable to get the default Bean Validation factory 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [resources/spring.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Unable to get the default Bean Validation factory 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:900) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) 
at main.java.com.gwt.app.server.User.<init>(User.java:16) 
at main.java.com.gwt.app.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:20) 
at main.java.com.gwt.app.client.Main.main(Main.java:10) 
Caused by: org.hibernate.HibernateException: Unable to get the default Bean Validation factory 
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.java:127) 
at org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL(Configuration.java:1677) 
at org.hibernate.cfg.Configuration.applyConstraintsToDDL(Configuration.java:1627) 
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1418) 
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1348) 
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717) 
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1479) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
... 14 more 
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.BeanValidationActivator.applyDDL(BeanValidationActivator.java:118) 
... 22 more 
Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:383) 
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:109) 
... 27 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:380) 
... 28 more 

构建路径包含以下库:

hibernate3.jar 
org.springframework.aop-3.1.0.M1.jar 
org.springframework.asm-3.1.0.M1.jar 
org.springframework.aspects-3.1.0.M1.jar 
org.springframework.beans-3.1.0.M1.jar 
org.springframework.context-3.1.0.M1.jar 
org.springframework.context.support-3.1.0.M1.jar 
org.springframework.core-3.1.0.M1.jar 
org.springframework.expression-3.1.0.M1.jar 
org.springframework.instrument-3.1.0.M1.jar 
org.springframework.instrument.tomcat-3.1.0.M1.jar 
org.springframework.jdbc-3.1.0.M1.jar 
org.springframework.jms-3.1.0.M1.jar 
org.springframework.orm-3.1.0.M1.jar 
org.springframework.oxm-3.1.0.M1.jar 
org.springframework.transaction-3.1.0.M1.jar 

我没有使用验证。这是不包括验证瓶的原因。

我不知道会发生什么,我希望有人能帮助我。

谢谢!

+1

你可以请张贴更多的堆栈跟踪 – 2011-05-19 06:33:35

+0

您正在使用Hibernate的哪个版本的尝试一次? – 2011-05-19 07:00:46

+0

你能列出你的classpath中的hibernate和spring jar吗? – sudmong 2011-05-19 07:02:23

休眠上升一个throw new HibernateException("Unable to get the default Bean Validation factory", e);如果无法访问Bean Validation Framework(BeanValidationActivator)。

所以我想问题是验证罐丢失。

对Maven:

<dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.0.2.GA</version> 
    </dependency> 
+0

非常感谢!这解决了我的问题! – Andrew 2011-07-09 16:26:04

尝试增加以下Maven依赖(或者下载JAR的,如果你不使用Maven):

其他依赖也可能需要(考虑使用Maven如果你还没有,为了避免这样的问题)

加入这行到你的hibernate.cfg.xml文件

<property name="javax.persistence.validation.mode" value="none"/>