【问题标题】:Error creating bean sessionFactory创建 bean sessionFactory 时出错
【发布时间】:2011-05-19 06:31:30
【问题描述】:

我正在将 Spring 与 Hibernate 集成。但是,当我运行应用程序时,我收到如下错误:

在类路径资源 [resources/spring.xml] 中创建名称为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 org.hibernate.HibernateException: Unable to get the default Bean Validation factory

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

User 类中的注入是:

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

我没有使用验证。这是不包含验证jar的原因。

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

谢谢!

【问题讨论】:

  • 你能发布更多的stacktrace
  • 您使用的是哪个版本的 Hibernate?
  • 你能在你的类路径中列出hibernate和spring 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 和 hibernate3.jar跨度>

标签: java hibernate spring


【解决方案1】:

如果 Hibernate 无法访问 Bean Validation Framework (BeanValidationActivator),则会引发异常:throw new HibernateException( "Unable to get the default Bean Validation factory", e);

所以我猜问题是缺少验证 jar。

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

【讨论】:

    【解决方案2】:

    尝试添加以下 maven 依赖项(如果您不使用 Maven,请下载 JAR):

    可能还需要其他依赖项(如果还没有,请考虑使用Maven,以避免出现此类问题)

    【讨论】:

      【解决方案3】:

      将此行添加到您的 hibernate.cfg.xml 文件中尝试一次

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

      【讨论】:

        猜你喜欢
        • 2015-06-29
        • 1970-01-01
        • 2014-10-28
        • 2012-02-07
        • 2016-06-05
        • 2010-12-07
        • 2011-04-27
        • 2016-10-22
        • 2011-10-09
        相关资源
        最近更新 更多