我正在嘗試更新一些過去由其他人編寫的hibernate代碼,並運行到反序列化問題中。原代碼編寫的方式,它沒有明確的serialVersionUID聲明,只是實現Serializable接口 -休眠反序列化問題
public class SamplePOJO implements Serializable {
現在,我想一個新列添加到表,並將其映射到該對象。我:
- 變更的表創建
- 更新的對象,包括一個新的String對象和getter /爲二傳手 新列,
- 更新.hbm文件與數據庫表列映射目的。
然而,當我編譯後運行它,我得到以下錯誤 -
"Error while deserializing from byte[]., caused by x.y.SamplePOJO; local class incompatible: stream classdesc serialVersionUID = 7997933458932550222, local class serialVersionUID = <other number internally auto generated as source didn't explicitly mention serialVersionUID>"
如果我更新代碼以包括相匹配的上述錯誤拋出的serialVersionUID,它的執行沒有任何的問題。
根據我發現什麼信息,最常見的原因似乎是客戶端和服務器中的不同hibernate jar。然而,這不是這種情況,因爲它使用相同的Hibernate jar。如果有一種方法可以解決這個問題,而不必具體提及異常期間拋出的serialVersionUID,那麼有人可以提供幫助嗎?另外,如果我必須堅持這種方法,並且如果我的代碼移動到另一個環境(qa/prod),它是否會期望不同的serialVersionUID,這取決於它在其他環境中的序列化方式?
我會感激任何/所有的幫助!
謝謝。你澄清了我的疑問。 – JUG 2012-04-05 15:27:49