我试图让我的Spring-Hibernate程序运行三天。由于hibernate2和hibernate3之间的版本差异,我很难找到所涉及的依赖项。 最后,我能够使用以下一组依赖项运行程序
现在经过两天的努力,我能够管理上面提到的依赖项,我尝试建立类似的程序,但它抛出以下错误。我尝试在线解决方案,但我找到的解决方案是没有正确版本的弹簧和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>
答案 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工件的文章:
答案 1 :(得分:1)
我建议使用依赖项管理工具,例如Maven或Apache 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的预期项目结构,你应该没事。