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();就出现这问题了,配置那里没有弄错的,搜了好久了

解决方案 »

  1.   

    把你的配置、代码提出来好像说的是set方法不对
      

  2.   

    很明显啊,sdao里没配置datasouse属性。
    LZ应该:在文件[/WEB-INF/applicationContext.xml]的sdao(<bean>)注入datasourse
      

  3.   

    解释一下:
    继承了JdbcDaoSupport类的作用是这个类本身有JdbcTemplate 及datasourse的get/set方法,但是JdbcDaoSupport并不没有提供这两个属性的实例化,因此,还是要在配置问题中注入这个两个属性。 
      

  4.   

    <bean id="sdao" class="dao.StudentDAO">
          <property name="sessionFactory">
             <ref local="sessionFactory"/>
          </property>
     </bean>
    已经注入过了
      

  5.   

    <action-mappings>
        <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>
      

  6.   

    没有get ,set方法吧!配置很简单
      

  7.   

     Error creating bean with name 'sdao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; 没有 配置好 缺少 set方法 
      

  8.   

    private SessionFactory sessionFactory;
    public SessionFactory getSessionFactory() {
    return sessionFactory;
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;

    加了
      

  9.   

    public IStudentDAO getIsd() {
    return isd;
    }
    public void setIsd(IStudentDAO isd) {
    this.isd = isd;
    }已经写好的
      

  10.   

    看了你的配置文件了...感觉怪怪的...第一点:
    你的StudentDAO继承的是JdbcDaoSupport类,但是JdbcDaoSupport类只有两个属性dataSource和jdbcTemplate,所以应该要注入的是dataSource和jdbcTemplate两个bean,而不是session。而这样的话,你的项目就根本用不到hibernante的。第二点:
    若要使用Hibernate的话,StudentDAO应该继承HibernateDaoSupport类,然后注入sessionFactory或HibernateTemplate,使用HibernateTemplate模板进行数据的操作。
      

  11.   

    public class StudentDAO implements IStudentDAO{
    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
      

  12.   

    这是最近的错误 
    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)
      

  13.   

    于是到MyEclipse的安装目录中搜索hibernate-annotations.jar的包,发现在其中有四个hibernate-annotations.jar的包(MyEclipse6.0的版本下,5.x的不知道,可能只有三个),对比了一下他们的目录分别是:
    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就再也不会发生同样的问题了~就是这原因,弄了我心都要碎了
      

  14.   

    datasource 没有写set方法  你看配置文件里的<property name="?" rec="?"/>按着ctrl点那个name 如果set方法写对会直接找到的  这样每个都试着看下 看你的报错信息是datasource没有注入而不是sessionfactory