直接操作po造成hessian序列化問題

異常如下:
客戶端:
Cannot access Hessian service at [http://遠程ip/remote/authService]; nested exception is com.caucho.hessian.io.HessianProtocolException: 500: java.io.IOException: Server returned HTTP response code: 500 for URL:
服務端:
com.caucho.hessian.io.IOExceptionWrapper: java.lang.ClassNotFoundException: long
解決:我本來要同步school對象的(school和actCode對象是一對一),結果school中含有actCode信息,所以出現這種錯誤,school.setActCode(null);即可.

出現這個問題時,百思不得其解啊,看控制檯輸出提示是hessian反序列化過程中出現問題,看來問題出現在上傳的對象中,debug後發現了問題所在,看來還是實踐出真知啊,
總結:
以後遠程調用時儘量不要直接操作po,以免出現不必要的問題(hessian不能操作複雜的對象)


以下是一對一關係,以前一般用一對多,對一對一關係還是有點生疏.
school.hbm.xml
 
  1. <one-to-one name="actcode" class="SysActCode" cascade="save-update" outer-join="auto" constrained="true"/>  


SysActCode.hbm.xml
 
  1. <one-to-one name="school" class="School" cascade="save-update" outer-join="true" constrained="false"/> 

School school = this.getSchoolInfoService().getModel(this.getId());
//Hibernate:select s.ID, s.manager,... from school_info s where s.ID=?
if(school.getActcode()!=null){//這裏不爲null;
    /**
    * 但是System.out.println(school.getActcode());會拋出異常:
    * LazyInitializationException:could not initialize proxy,the owning Session was closed
    * 看來hibernate先用代理對象標識一下而已,在取值時才加載對象,
    */

}

one-to-one,many-to-one的lazy默認爲proxy,並且只能爲false或proxy或no-proxy,不能爲true;
單點關聯中lazy可以設置: 
lazy  (可選  -  默認爲  proxy):  默認情況下,單點關聯是經過代理的
lazy= "no-proxy"指定此屬性應該在實例變量第一次被訪問時應該延遲抓取(fetche lazily)需要運行時字節碼的增強)
lazy= "false"指定此關聯總是被預先抓取
發佈了2 篇原創文章 · 獲贊 1 · 訪問量 4131
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章