JSP教程之整合hibernate持久層2_JSP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:JSP教程之整合hibernate持久層1
      整合hibernate持久層----1,基本配置 在學(xué)習(xí)這一部分的時(shí)候我作了一個用StrutsAction訪問UserDAO中方法,此方法使用了hibernateTemplate。調(diào)試過程中問題多多,好在一個一個解決了。 JPetStore2.0已經(jīng)有ibatis做為OR層了,我要換成hibernate需要修改Spring配

      使用Hibernate持久層 --- 2 出現(xiàn)的問題與解決方法總結(jié)
      現(xiàn)象1:
      org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’org.springframework.aop.support.DefaultPointcutAdvisor’ defined in null: Can’t resolve reference to bean ’txAdvice’ while setting property ’advice’; nested exception is 

      原因:缺少Spring開頭的各種包,到Spring2.0 src中編譯新的dist目錄出來,拷貝全部的springxxx.jar到j(luò)petstore/WEB-INF/lib下。OK。
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 現(xiàn)象2:
      org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’sessionFactory’ defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
      java.lang.NoClassDefFoundError: javax/transaction/TransactionManager

      原因:缺少jta.jar,OK
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 現(xiàn)象3:
      java.lang.NoClassDefFoundError: org/dom4j/Attribute
      缺dom4j.jar
      java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
      缺ehcache.jar
      java.lang.NoClassDefFoundError: net/sf/cglib/core/KeyFactory
      缺cglib-full.jar
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 現(xiàn)象4:
      org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’sessionFactory’ defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: could not instantiate id generator
      net.sf.hibernate.MappingException: could not instantiate id generator

      原因:
      hbm中id字段的定義為沒有定義的sequesce,修改為inc
      <id
         name="id"
         type="string"
         column="userid"
        >
         <generator class="net.sf.hibernate.id.IncrementGenerator"/> // 原來是sequence.
        </id>
      這樣就可以了。

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      現(xiàn)象6:
      org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’/shop/addItemToCart.do’ defined in ServletContext resource [/WEB-INF/petstore-servlet.xml]: Can’t resolve reference to bean ’petStore’ while setting property ’petStore’; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ’petStore’ is defined
      org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ’petStore’ is defined
      原因:
      我使用Struts作為action,當(dāng)然就不需要使用Spring WEB framework,因此也不需要與之配套的配置文件例如,petstore-servlet.xml,
      還有remote-servlet.xml ,但是Spring仍舊加載此兩個文件,沒辦法,只好將此兩個文件挪動到別的地方,但是又出現(xiàn)找不到這兩個
      文件的IO異常,沒辦法,只好又拷貝回來,然后把文件內(nèi)容晴空。
      終于好用了。
      原因就是,只要你在web.xml中定義了這個servlet,他就要去找此servlet名字對應(yīng)的配置文件(servletname-servlet.xml),找不到就出錯。ok,現(xiàn)在注釋掉web.xml中名字為petstore的servlet定義和影色,刪除petstore-servlet.xml文件,哈哈,這下不報(bào)告錯誤了。
      同理,注釋名字為remote的servlet,刪除remote-servlet.xml后,重新啟動tomcat,這下不報(bào)告任何錯誤了。呵呵。原來如此啊。

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      現(xiàn)象:
      java.lang.NullPointerException
       srx.test.testhibernate.UserDAO.getAll(UserDAO.java:9)
       srx.test.struts.action.UserAction.execute(UserAction.java:20)
      原因:

      Action原來
      UserDAO // 這個類OK
      public class UserDAO extends HibernateDaoSupport {
       public List getAll() {
             return this.getHibernateTemplate().find("select aa from Account aa");
       }
      }

      //這個類需要修改
      public class UserAction extends ActionSupport {
        UserDAO dao = new UserDAO(); 
        List accounts = dao.getAll();
      。。。
      }
      修改:
      //UserDAO dao = new UserDAO(); 
      WebApplicationContext wac = this.getWebApplicationContext();
        UserDAO dao = (UserDAO) wac.getBean("userDAO");
      OK

      分享:Spring學(xué)習(xí)基礎(chǔ)---與Struts整合
      《Spring開發(fā)指南》只寫了一種與struts整合的方法,另一種到Spring2.0 Demo自帶的Doc中查找到Action直接繼承ActionSupport。詳細(xì)信息: TointegrateyourStrutsapplicationwithSpring,youhavetwooptions: ConfigureSpringtomanageyourActionsasbeans,usingtheCo

      來源:模板無憂//所屬分類:JSP教程/更新時(shí)間:2010-03-04
      相關(guān)JSP教程