<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    迷失北京

    BlogJava 聯(lián)系 聚合 管理
      60 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks

        1.  也是最討厭的:NullPointerException。在整合SSH中經(jīng)常出現(xiàn)的莫過于NullPointerException了,導(dǎo)致這種錯(cuò)的原因很多。bean的注入問題,也就是spring的配置文件中的錯(cuò)誤;struts2和spring的整合問題,如果整合出現(xiàn)問題也會(huì)出現(xiàn)這種錯(cuò)誤。關(guān)于第二種情況要多說一點(diǎn)了,因?yàn)榻裉煳矣龅搅诉@個(gè)錯(cuò)誤。其實(shí)也是常識(shí)性的錯(cuò)誤struts2沒有整合spring的應(yīng)用。

             這里簡(jiǎn)單說一下struts2和spring整合的問題:首先struts2方面應(yīng)該引入struts2-spring-plugin-2.2.1.jar和其他struts2 所必需的包,然后就是配置文件中struts.xml應(yīng)該加入:<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />表示和spring的整合。

          我覺得還是有必要詳細(xì)的描述一下今天我遇到的問題:我通過spring配置的action類中的方法通過Junit可以測(cè)試成功,但是jsp頁面訪問的時(shí)候產(chǎn)生了NullPointerException,費(fèi)了半天的勁才發(fā)現(xiàn)是這種錯(cuò)誤!!不過錯(cuò)誤解決了心里聽高興的!!

       2.  java.lang.NoSuchMethodError: antlr.collections.AST.getLine()。這個(gè)錯(cuò)誤也挺容易出現(xiàn)的。這個(gè)錯(cuò)誤產(chǎn)生的原因是將阿寶的沖突。antlr-2.7.6.jar在struts2和hibernate中都有,分別使用框架的時(shí)候沒問題但是如果整合起來就會(huì)出現(xiàn)這樣的問題,去掉一個(gè)較低版本的就可以了!

        3.   配置攔截器后表單參數(shù)不能實(shí)例化!!這是什么原因呢?這個(gè)問題的原因涉及到struts的自動(dòng)裝載機(jī)制,但是解決方案挺簡(jiǎn)單的,將struts2的默認(rèn)攔截器也配置上!!如果應(yīng)用中沒有配置攔截器表單傳遞過來的參數(shù)是不能自動(dòng)裝載成為對(duì)象的!!

        4.   hibernate的session管理問題:Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL) !這是使用spring的opensessioninview引起的異常!!網(wǎng)上的方案挺多的,我使用了這種方案:

    <init-param>
    <param-name>singleSession</param-name>
    <param-value>true</param-value>
    <param-name> flushMode </param-name>
    <param-value>AUTO </param-value>
    </init-param>

    還有一種方案要在spring的配置文件中配置:

    <bean id="baseTransaction"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
    abstract="true">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="proxyTargetClass" value="true"/>
    <property name="transactionAttributes">
    <props>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="add*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="del*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>

    5.關(guān)于hibernate的復(fù)雜交叉的映射關(guān)系。今天遇到了org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException occurred while calling setter of org.blog.po.User.ulog; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of org.blog.po.User.ulog 這樣的錯(cuò)誤(錯(cuò)誤類型一樣,但是具體信息不一樣)。錯(cuò)誤信息中提示type mismatch:類型不匹配。我就一直納悶因?yàn)槲覚z查了好幾遍,完全沒問題呀!最后還是找到了問題的根源。我先說明一下這個(gè)關(guān)聯(lián)關(guān)系:關(guān)聯(lián)對(duì)象,用戶和組;用戶可以創(chuàng)建一個(gè)組,一個(gè)組中有多個(gè)用戶。聽起來還是蠻簡(jiǎn)單的,但是錯(cuò)誤出現(xiàn)了。

    分析一下原因:因?yàn)楫?dāng)初我考慮到效率的問題用的是雙向的關(guān)聯(lián)關(guān)系,其實(shí)這也就是出錯(cuò)的根源,用戶與組之間存在兩種關(guān)聯(lián)關(guān)系,hibernate不能分清楚用戶誰是創(chuàng)建者誰是用戶,所以出現(xiàn)了這樣的問題。干脆拋棄雙向的關(guān)系,雙方都使用單向的關(guān)系,問題解決了!!

           6.這個(gè)錯(cuò)誤信息是這樣的:nested exception is org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update。我到網(wǎng)上搜了一下這個(gè)個(gè)問題的答案:(1)因?yàn)?/span> Hibernate Tools (或者 Eclipse 本身的 Database Explorer )生成 *.hbn.xml 工具中包含有 catalog="***" *表示數(shù)據(jù)庫(kù) 名稱)這樣的屬性,所以數(shù)據(jù)庫(kù)遷移到其它數(shù)據(jù)庫(kù)就會(huì)產(chǎn)生這樣的錯(cuò)誤。(2)數(shù)據(jù)表中的字段與hibernate映射文件中的屬性配置沖突,造成插入無法進(jìn)行。

         最后我說一下我的錯(cuò)誤:我的錯(cuò)誤其實(shí)和第二種類似,我創(chuàng)建了一個(gè)名為L(zhǎng)imit的類,不知道這是mysql的關(guān)鍵字,還是hibernate的關(guān)鍵字,hibernate沒有幫我自動(dòng)生成這個(gè)limit數(shù)據(jù)表,所以...

        7.關(guān)于 org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions的錯(cuò)誤!!這個(gè)錯(cuò)誤也是讓我煞費(fèi)苦心,搞了差不多將近兩個(gè)多小時(shí)!!試盡了我想到的可能解決這個(gè)問題的方法,但是畢竟還是小鳥一只...結(jié)果你懂得!!但是老鳥還是遍地飛呀...

         哦哦...忘了說明錯(cuò)誤出現(xiàn)的場(chǎng)景了:組織---個(gè)人(多對(duì)多關(guān)系),更新組織中成員的時(shí)候出現(xiàn)了這個(gè)錯(cuò)誤,更新我用的update方法!!好吧下面說一下解決方案:只要把update換成merg就ok了!!

        簡(jiǎn)單介紹一下merge方法:

    merge方法
    調(diào)用merge方法的時(shí)候,hibernate會(huì)檢查在持久化上下文中的持久化實(shí)例是否和脫管實(shí)例具有相同的標(biāo)識(shí)符。如果有,把脫管實(shí)例的狀態(tài)負(fù)責(zé)到持久化實(shí)例中;如果沒有,就從數(shù)據(jù)庫(kù)中加載,然后把脫管實(shí)例和獲取的對(duì)象狀態(tài)合并;如果數(shù)據(jù)庫(kù)中沒有查到結(jié)果,就創(chuàng)建新的持久化實(shí)例,把脫管實(shí)例的狀態(tài)復(fù)制到新實(shí)例,插入到數(shù)據(jù)庫(kù)中,并通過merge()操作返回。

        我覺得我還有必要記錄一下我解決錯(cuò)誤時(shí)的方案:我首先想到的是hibernate懶加載惹的禍,因?yàn)槲以趆bm配置文件中配置了lazy懶加載。但是問題還是沒有解決。于是我把update(Team team, String tid)方法修改為update(Set<User> users, String tid),問題還是不得解決,于是完全否定了是懶加載的問題!但是對(duì)于上面的這種方案我還是不太理解,SSH的session問題肯定是一個(gè)大問題!!

    未完待續(xù)......

        

    posted on 2011-03-19 19:36 王康 閱讀(1421) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品国产综合久久一线| 免费a级毛片无码a∨蜜芽试看| 免费播放春色aⅴ视频| 亚洲精品天堂在线观看| 性生交片免费无码看人| 亚洲成人福利在线观看| 麻豆国产精品免费视频| 亚洲国产精品免费在线观看| 亚欧在线精品免费观看一区| 亚洲无砖砖区免费| 在线观看特色大片免费视频| 亚洲性色精品一区二区在线| 精品国产免费观看一区| 特黄特色的大片观看免费视频| 日韩免费码中文在线观看| 成人黄页网站免费观看大全| 亚洲国产精品无码久久久秋霞1| 免费无码专区毛片高潮喷水| 四虎AV永久在线精品免费观看| 最好2018中文免费视频| MM131亚洲国产美女久久| a级毛片免费在线观看| 免费黄色毛片视频| 免费在线人人电影网| 中文字幕亚洲一区二区三区| 久久大香香蕉国产免费网站| 亚洲另类自拍丝袜第1页| 在线免费观看毛片网站| 日韩在线视频线视频免费网站| 亚洲AV中文无码字幕色三| 日本免费一区二区在线观看| 亚洲乱码国产乱码精华| 亚洲一区无码精品色| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 亚洲精选在线观看| 国产福利在线免费| 七次郎成人免费线路视频| 亚洲国产精品久久久久婷婷软件 | 亚洲一级黄色大片| 在线观看肉片AV网站免费| 亚洲一区二区三区四区视频|