【问题标题】:Correct version of Spring and Hibernate and required dependencies...Exception due to dependenciesSpring 和 Hibernate 的正确版本以及所需的依赖项...由于依赖项导致的异常
【发布时间】:2011-03-16 13:33:13
【问题描述】:

三天以来,我一直在尝试运行我的 Spring-Hibernate 程序。由于hibernate2和hibernate3之间的版本差异,我很难找到所涉及的依赖项。 最后我能够运行具有以下依赖项的程序

  • cglib-nodep-2.1_3.jar
  • commons-collections.jar
  • commons-dbcp.jar
  • commons-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-connector-java-5.0.8-bin.jar
  • org.springframework.orm-3.1.0.M1.jar
  • org.springframework.transaction-3.1.0.M1.jar
  • spring-2.5.6.jar
  • spring-beans-2.0.4.jar

现在经过两天的努力,当我能够管理上述依赖项时,我尝试构建类似的程序,但它引发了以下错误。我尝试在线寻求解决方案,但我发现的解决方案没有正确版本的 spring 和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>

【问题讨论】:

    标签: java hibernate spring


    【解决方案1】:

    一)

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

    来源:

    b)

    • org.springframework.orm-3.1.0.M1.jar
    • org.springframework.transaction-3.1.0.M1.jar
    • spring-2.5.6.jar
    • spring-beans-2.0.4.jar

    您真的认为将当前的预发布版本 (3.1.x) 与旧版本(2007 年发布的 2.0.4)混合是一个好主意吗?


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

    Obtaining Spring 3 Artifacts with Maven

    【讨论】:

    • 嗨,肖恩,感谢您的快速响应和有用的链接,我正在通过这个链接,但我是一个新手,刚刚配置了一个简单的程序,我想知道为什么我需要这些依赖项的标准是什么选择这些依赖项。如何知道哪些依赖项是必需的,哪些不是。
    • @Anupam 恐怕没有简单的答案。您需要了解许多不同的技术及其协同工作。 this one 之类的教程可以提供帮助,但几乎总是过时的。我建议坚持使用当前的 Spring Release 3.0.x 并研究他们的hibernate reference and samples
    • 谢谢肖恩...让我做这个功课,我也会学习 maven...我希望这会让我的情况好一点.......关于例外的任何想法我上面提到的?
    • @Anupam 您的配置看起来不错,我猜您在使用不同版本时遇到了问题。删除所有 spring* 和 org.springframework* jar,下载 the latest release version 并将该版本中的所有 spring jar 放在类路径中。在你有更多时间真正解决问题之前,这应该会让你起床
    • .. 非常感谢您的指导帮助了我很多,现在一切都运行顺利.. 现在我知道需要哪些依赖项以及为什么我们需要它们。版本不匹配是邪恶的!!!!!!
    【解决方案2】:

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

    【讨论】:

    • 嗨,马特感谢您的回复和提供的链接...我将学习依赖管理,但在学习之前,我想了解所需的最小集是什么以及每个依赖的作用是什么。 ..你能不能给我一个链接,我可以知道基本的spring-hibernate集成程序的流程以及哪个依赖在扮演什么角色
    【解决方案3】:

    解决了我的问题...正如 Sean 所指出的,这是由于混合了不同版本的 spring 和 hibernate。给其他新手的信息是请使用最新版本的 spring 和 hibernate。从 Spring 3.0 开始,Spring 需要 Hibernate 3.2 或更高版本。切勿混合新旧版本。

    【讨论】:

    • 很高兴向其他新手发送消息:)
    【解决方案4】:

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

    <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 的预期项目结构,你应该没问题。

    【讨论】:

      猜你喜欢
      • 2013-04-07
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2020-04-17
      • 2014-07-07
      • 2019-12-23
      相关资源
      最近更新 更多