action: null
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sdao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'datasource' of bean class [dao.StudentDAO]: Bean property 'datasource' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?
org.springframework.beans.NotWritablePropertyException: Invalid property 'datasource' of bean class [dao.StudentDAO]: Bean property 'datasource' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?Servlet /SpringHibenate1 threw load() exception我在写public class StudentDAO extends JdbcDaoSupport implements IStudentDAO{
JdbcTemplate jt=this.getJdbcTemplate();就出现这问题了,配置那里没有弄错的,搜了好久了
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sdao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'datasource' of bean class [dao.StudentDAO]: Bean property 'datasource' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?
org.springframework.beans.NotWritablePropertyException: Invalid property 'datasource' of bean class [dao.StudentDAO]: Bean property 'datasource' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?Servlet /SpringHibenate1 threw load() exception我在写public class StudentDAO extends JdbcDaoSupport implements IStudentDAO{
JdbcTemplate jt=this.getJdbcTemplate();就出现这问题了,配置那里没有弄错的,搜了好久了
LZ应该:在文件[/WEB-INF/applicationContext.xml]的sdao(<bean>)注入datasourse
继承了JdbcDaoSupport类的作用是这个类本身有JdbcTemplate 及datasourse的get/set方法,但是JdbcDaoSupport并不没有提供这两个属性的实例化,因此,还是要在配置问题中注入这个两个属性。
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
已经注入过了
<action
attribute="queryForm"
input="query.jsp"
name="queryForm"
path="/query"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy" /> </action-mappings>
<message-resources parameter="struts.ApplicationResources" />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in> <bean id="sdao" class="dao.StudentDAO">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean name="/query" class="struts.action.QueryAction" singleton="true">
<property name="isd">
<ref local="sdao"/>
</property>
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>/WEB-INF/hibernate.cfg.xml</value>
</property>
</bean>
<session-factory>
<property name="connection.username">sa</property>
<property name="connection.url">
jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=GradeManager
</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="myeclipse.connection.profile">sql</property>
<property name="connection.password">sa</property>
<property name="connection.driver_class">
com.microsoft.jdbc.sqlserver.SQLServerDriver
</property>
<mapping resource="po/Student.hbm.xml" /></session-factory>
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
加了
return isd;
}
public void setIsd(IStudentDAO isd) {
this.isd = isd;
}已经写好的
你的StudentDAO继承的是JdbcDaoSupport类,但是JdbcDaoSupport类只有两个属性dataSource和jdbcTemplate,所以应该要注入的是dataSource和jdbcTemplate两个bean,而不是session。而这样的话,你的项目就根本用不到hibernante的。第二点:
若要使用Hibernate的话,StudentDAO应该继承HibernateDaoSupport类,然后注入sessionFactory或HibernateTemplate,使用HibernateTemplate模板进行数据的操作。
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public List queryStuBySname(String stuName){
String sql = "from Student where stuName like '%"+stuName+"%'";
HibernateTemplate ht=new HibernateTemplate(sessionFactory);
List stus=ht.find(sql);
return stus;
}
}这是我的StudentDAO
action: null
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sdao' defined in ServletContext resource [/WEB-INF/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 ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass
java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1815)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at org.hibernate.cfg.Configuration.add(Configuration.java:386)
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:427)
at org.hibernate.cfg.Configuration.addResource(Configuration.java:482)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1325)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:651)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1091)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:396)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:186)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1046)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:378)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:283)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
at org.springframework.web.struts.ContextLoaderPlugIn.createWebApplicationContext(ContextLoaderPlugIn.java:353)
at org.springframework.web.struts.ContextLoaderPlugIn.initWebApplicationContext(ContextLoaderPlugIn.java:296)
at org.springframework.web.struts.ContextLoaderPlugIn.init(ContextLoaderPlugIn.java:225)
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:869)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:336)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4044)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1105)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1203)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1307)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.HbmBinder$SecondPass
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
... 50 more
2009-3-19 22:47:13 org.apache.catalina.core.ApplicationContext log
信息: Marking servlet action as unavailable
2009-3-19 22:47:13 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /SpringHerbenate3 threw load() exception
javax.servlet.UnavailableException
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:880)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:336)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4044)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1105)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1203)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1307)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560)
at java.lang.Thread.run(Thread.java:619)
1.MyEclipse\eclipse\plugins\com.genuitec.org.hibernate.eclipse_......\lib\annotations --[352k]
2.MyEclipse\eclipse\plugins\com.genuitec.eclipse.springframework_......\#\2.0\lib\hibernate --[257k]
3.MyEclipse\eclipse\plugins\com.genuitec.org.hibernate.eclipse_......\myeclipse-#\3.2\lib\entitymanager --[257k]
4.MyEclipse\eclipse\plugins\com.genuitec.eclipse.springframework_......\#\1.2\lib\dependencies\hibernate --[128k]而出错的就是第四个目录下的hibernate-annotations.jar的包,一共128k大小
观察四个包的文件大小后很明显这个问题的原因出在Spring的版本上,由于spring2.0的版本比较新,所以更新的hinbernate包也比较新,而spirng1.2的版本中,虽然包含了hibernate3.x的版本,但是却由于没有及时更新其中的hibernate包,所以导致出现了这个异常bug,也不知道是因为MyEclipse没有及时更新spring的补丁版本,还是因为spring的工程师忽略了这个问题~,犯下了这种小错误,哈哈,不过说起来也是,人无完人嘛~~分析了问题发生的原因,最后剩下的就是这个问题的彻底解决办法,很简单
把搜索到的第二或者第三个文件夹中的hibernate-annotations.jar包复制到项目的lib目录中覆盖即可,当然如果以后不想再发生这样的问题的话那就把这个文件直接覆盖搜索到的第四个目录中hibernate-annotations.jar吧,这样以后MyEclipse就再也不会发生同样的问题了~就是这原因,弄了我心都要碎了