Spring3.1& Hibernate4配置。无法加载类[org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider]

时间:2012-02-28 14:48:26

标签: spring hibernate

我正在尝试使用Hibernate 4和spring 3.1开发一个Web项目。我在applicationContenxt.xml中声明了sessionFactory bean。

<bean id="sessionFactory" scope="singleton" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </bean>

我想使用Oracle数据库,所以我的hibernate.cfg.xml文件是:

<session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
        <property name="connection.username">****</property>
        <property name="connection.password">****</property>
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>

        <!--
            Enable c3p0 connection pooling, because hibernate pooling is not
            prod-ready. Apparently connection.provider_class is needed in
            hibernate 3+
        -->
        <property name="connection.provider_class">
        org.hibernate.connection.C3P0ConnectionProvider</property>
        <!-- <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> -->
        <property name="c3p0.max_size">100</property>
        <property name="c3p0.min_size">1</property>
        <property name="c3p0.idle_test_period">30</property>

        <!-- Echo all executed SQL to stdout for debugging -->
        <property name="show_sql">true</property>

        <!-- All the entity classes for hibernate to check for annotations here
-->
        <mapping class="data.Event" />

当我运行应用程序时。我得到例外:

1543 [Thread-2] ERROR org.springframework.web.context.ContextLoader  - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
    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:225)
    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:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:377)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:278)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我无法解决问题,因为我绝对是Spring和Hibernate的初学者。

有没有人对这个问题有所了解。

1 个答案:

答案 0 :(得分:4)

更改为此(您正在引用hibernate 3,这是hibernate v4的正确类):

<bean id="sessionFactory" class="*org.springframework.orm.hibernate4.LocalSessionFactoryBean*">
  <property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>

你可能需要这个(如果使用maven)

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-core</artifactId>
 <version>4.0.0.Final</version>
 <type>jar</type>
 <scope>compile</scope>
</dependency>