hibernate3.LocalDataSourceConnectionProvider无法强制转换为ConnectionProvider

时间:2014-01-23 07:05:35

标签: java spring hibernate spring-mvc spring-orm

2.4发布,hibernate 3.3.2ga。在创建sessionfactory时。我收到了以下错误。请给我一个解决方案

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="dataSource" ref="erpUSDataSource" />

            <property name="annotatedClasses">
                <list>
                    <value>com.bean.OrderDetailsVO</value>
                    <value>com.bean.OrderVO</value>
                </list>

            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <!--  <prop key="hibernate.hbm2ddl.auto">update</prop> -->
                    <!-- <prop key="hibernate.use_outer_join">false</prop>
                    <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
                    <prop key="hibernate.hibernate.cache.use_query_cache">true</prop> -->
                </props>
            </property>
     </bean>
     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
     </bean>

引起:org.hibernate.HibernateException:无法实例化连接提供程序[org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider]     在org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:192)[hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]     在org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:114)[hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]     在org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:54)[hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]     at org.hibernate.service.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:69)[hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]     在org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:176)[hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]     ......还有90多个 引起:java.lang.ClassCastException:org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider无法强制转换为org.hibernate.service.jdbc.connections.spi.ConnectionProvider     在org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:189)[hibernate-core-4.2.0.Final-redhat-1.jar:4.2.0.Final-redhat-1]     ......还有94个

2 个答案:

答案 0 :(得分:0)

从堆栈跟踪判断你是在一个较新的JBoss服务器上进行部署,默认情况下,它随hibernate4一起提供,因为hibernate3类不能正常工作。

您必须将自己的hibernate库包含到war文件中才能使用hibernate3(您可能必须修复其他几个类加载问题)。或者你切换到使用Hibernate4。

当使用hibernate4时,不再有HibernateTemplate(因为自2006年hibernate 3.0.1发布以来应该被认为已经弃用了!)。如果您严重依赖HibernateTemplate,则可能需要更改部分代码。

对于您的配置,只需切换到hibernate4类。

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="erpUSDataSource" />
    <property name="annotatedClasses">
        <list>
            <value>com.bean.OrderDetailsVO</value>
            <value>com.bean.OrderVO</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <!--  <prop key="hibernate.hbm2ddl.auto">update</prop> -->
            <!-- <prop key="hibernate.use_outer_join">false</prop>
            <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
            <prop key="hibernate.hibernate.cache.use_query_cache">true</prop> -->
        </props>
    </property>
</bean>

使用的HibernateTransactionManager也是如此,它也需要切换到hibernate4,这只是改变包。

有关Spring和hibernate集成的更多信息,请检查the reference guide

如上所述,不再需要HibernateTemplate,而应使用普通的Hibernate API来实现存储库。更多信息here

您应该已经拥有适当的交易管理设置,但以防查看参考指南的this section

答案 1 :(得分:0)

我添加了Hibernate jar 4.0.1.Final包括Hibernate Entitymanagaer,Hibernate-commons annotation,antlr 2.x,antlr-runtime2.x ..

我猜我的问题是由于不包括上面的罐子。我在上面的罐子里添加了我的问题得到了解决

                               com.bean.OrderDetailsVO             com.bean.OrderVO                                         org.hibernate.dialect.SQLServer2008Dialect             真正             更新&LT; /丙&GT; - &GT;             假LT; /丙&GT;             net.sf.ehcache.hibernate.SingletonEhCacheProvider&LT; /丙&GT;             真LT; /丙&GT; - &GT;