【问题标题】:Spring3.1 & Hibernate4 configuration. Unable to load class [org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider]Spring3.1 & Hibernate4 配置。无法加载类 [org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider]
【发布时间】:2012-02-28 14:48:25
【问题描述】:

我正在尝试使用 Hibernate 4 和 spring 3.1 开发一个 Web 项目。我在 applicationContext.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 的绝对初学者。

有没有人知道这个问题。

【问题讨论】:

  • 你确定你有hibernate和c3po的所有依赖吗?

标签: spring hibernate


【解决方案1】:

改成这个(你引用的是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>

【讨论】:

  • 它不起作用。我有 java.lang.ClassNotFoundException:org.springframework.orm.hibernate4.LocalSessionFactoryBean。我错过了任何罐子吗?
  • @erencan 那不是 hibernate4 jar,它是一个完全不同的 jar 文件
  • 我找不到任何 hibernate4.jar。 hibernate4.0 zip文件中没有jar文件。但是,我下载了 Spring 3.1.1。释放并更换所有 Spring jar。问题已经解决了。非常感谢。 :)
猜你喜欢
  • 2014-10-24
  • 2013-03-26
  • 2016-07-25
  • 2012-12-07
  • 2014-01-21
  • 2021-10-02
  • 1970-01-01
  • 2013-08-10
相关资源
最近更新 更多