客戶端:
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
- <one-to-one name="actcode" class="SysActCode" cascade="save-update" outer-join="auto" constrained="true"/>
SysActCode.hbm.xml
- <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"指定此關聯總是被預先抓取