正确版本的Spring和Hibernate以及所需的依赖项......由于依赖性而导致的异常

时间:2011-03-16 13:33:13

标签: java hibernate spring

我试图让我的Spring-Hibernate程序运行三天。由于hibernate2和hibernate3之间的版本差异,我很难找到所涉及的依赖项。 最后,我能够使用以下一组依赖项运行程序

  • CGLIB的节点p-2.1_3.jar
  • 公地collections.jar
  • commons-dbcp.jar
  • 公地pool.jar
  • commons-logging.jar
  • DOM4J-1.4.jar
  • ehcache的-1.6.0-beta1.jar
  • hibernate-3.1.3.jar
  • 的hsqldb.jar
  • jta.jar log4j-1.2.9.jar
  • MySQL的连接器的Java-5.0.8-bin.jar
  • org.springframework.orm-3.1.0.M1.jar
  • org.springframework.transaction-3.1.0.M1.jar
  • 弹簧2.5.6.jar
  • 弹簧豆-2.0.4.jar

现在经过两天的努力,我能够管理上面提到的依赖项,我尝试建立类似的程序,但它抛出以下错误。我尝试在线解决方案,但我找到的解决方案是没有正确版本的弹簧和hibernate ...任何人都可以告诉我正确的异常原因以及正确版本的Spring和hibernate


Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myRecordDAO' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'hibernateTemplate' while setting bean property 'hibernateTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)

我也在添加我的应用程序context.xml

<?xml version="1.0" encoding="UTF-8"?>

<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-2.0.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/subhash"/>
        <property name="username" value="root"/>
        <property name="password" value=""></property>
    </bean>


    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <value>MyRecord.hbm.xml</value>
            </list>
         </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>

    </bean>

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>
    <bean id="myRecordDAO" class="com.shoesobjects.MyRecordDAOHibernateWithSpring">
        <property name="hibernateTemplate"><ref local="hibernateTemplate"/></property>
    </bean>
</beans>

4 个答案:

答案 0 :(得分:3)

A)

  

注意
  从Spring 3.0开始,Spring需要 Hibernate 3.2或更高版本

来源:

b)中

  
      
  • org.springframework.orm-的 3.1.0.M1 的.jar
  •   
  • org.springframework.transaction-的 3.1.0.M1 的.jar
  •   
  • 弹簧的 2.5.6 的.jar
  •   
  • 弹簧beans-的 2.0.4 的.jar
  •   

你真的认为当前预发布版本(3.1.x)与古老版本(2007年发布的2.0.4版本)是一个好主意吗?


作为matt says:使用像Maven这样的依赖管理系统,你正在处理的是jar地狱。这是一篇关于从maven引用Spring 3.x工件的文章:

  

<强> Obtaining Spring 3 Artifacts with Maven

答案 1 :(得分:1)

我建议使用依赖项管理工具,例如MavenApache Ivy,这样您就不必自行处理依赖项和所需版本的排序。

答案 2 :(得分:1)

解决了我的问题...正如Sean指出的那样,由于混合了不同版本的弹簧和休眠。其他新手的消息请使用spring和hibernate的最新版本。从Spring 3.0开始,Spring需要Hibernate 3.2或更高版本。不应该混合使用新版本。

答案 3 :(得分:0)

这是一个对我有用的简单文件,我使用了事务管理器,而不是模板。

<bean id="mySqlDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver" />
            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/stackoverflow" />
            <property name="user" value="root" />
            <property name="password" value="******" />
            <property name="maxPoolSize" value="50" />
    </bean>

    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="mySqlDataSource" />
            <property name="mappingResources">
                    <list>
                            <value>Post.hbm.xml</value>
                            <value>Tag.hbm.xml</value>
                            <value>User.hbm.xml</value>
                    </list>
            </property>

            <property name="hibernateProperties">
                    <value>hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
                    </value>
                    <!--
                            hibernate.connection.provider_class =
                            org.hibernate.connection.C3P0ConnectionProvider
                            hibernate.hbm2ddl.auto=update
                            hibernate.current_session_context_class=thread
                    -->
            </property>
    </bean>

    <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
            <!--
                    <property name="dataSource" ref="mySqlDataSource"/>
            -->
    </bean>

另外,我认为hibernate下载包附带了单独的文件夹,用于指示其特定的依赖项。至于hibernate和spring之间的相互关系,我认为你将不得不像其他人所建议的那样使用一些依赖管理工具。我认为maven不是一个方便的工具。只是不要偏离maven的预期项目结构,你应该没事。