首页 > 代码库 > Struts2+Spring3+Hibernate4中,数据源应配置在Spring下,否则有异常:Cannot unwrap to requested type [javax.sql.DataSource]

Struts2+Spring3+Hibernate4中,数据源应配置在Spring下,否则有异常:Cannot unwrap to requested type [javax.sql.DataSource]

      启动项目,报错:org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]。也就是说,不能打开数据源。可是我在Hibernate的配置文件中明明配置了数据源了啊。原来应该由Spring来管理数据源,而Hibernate只需要管理OR-Mapping就可以了。于是将Hibernate的数据源删除,在Spring中配置。代码如下:

技术分享
 1 <bean id="dataSource" 2         class="org.apache.commons.dbcp.BasicDataSource" abstract="false" 3         lazy-init="default" autowire="default" destroy-method="close"> 4     <property name="driverClassName" value="http://www.mamicode.com/com.mysql.jdbc.Driver"><!-- 设置数据库的驱动 --> 5     </property> 6     <property name="url" 7         value="http://www.mamicode.com/jdbc:mysql://localhost:3306/db_project"><!--设置数据库的地址 --> 8     </property> 9     <property name="username" value="http://www.mamicode.com/root"></property><!-- 设置用户名 -->10     <property name="password" value="http://www.mamicode.com/111"></property><!-- 设置密码 -->11     </bean>
View Code

      然后将dataSource注入到sessionFactory中。代码如下:

技术分享
1 <bean id="sessionFactory"2         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">3         <property name="configLocation"4             value="http://www.mamicode.com/classpath:hibernate.cfg.xml">5         </property>6         7         <property name="dataSource" ref="dataSource"></property>8     </bean>
View Code

       org.springframework.orm.hibernate4.LocalSessionFactoryBean这个类中有相应的dataSource的setter方法,因此按照上述进行配置,就可以了。

    然后将Hibernate配置文件中关于数据源的属性全部删除,这个问题就解决了。

Struts2+Spring3+Hibernate4中,数据源应配置在Spring下,否则有异常:Cannot unwrap to requested type [javax.sql.DataSource]