【发布时间】:2012-03-23 06:32:57
【问题描述】:
我正在尝试更新一些其他人过去编写的休眠代码并遇到反序列化问题。原始代码的编写方式,它没有显式声明 serialVersionUID,只是实现了 Serializable 接口 -
public class SamplePOJO implements Serializable {
现在,我正在尝试向表中添加一个新列并将其映射到该对象。我:
- 更改表以创建新列
- 更新了对象以包含新的字符串对象和 getter/setter 为此,并且
- 更新了 .hbm 文件以将 db 表列与对象映射。
但是,当我在编译后运行它时,出现以下错误 -
"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,它会毫无问题地执行。
根据我发现的信息,最常见的原因似乎是客户端和服务器中的休眠 jar 不同。但是,这里不是这种情况,因为它使用相同的休眠 jar。如果有一种方法可以解决此问题而无需特别提及异常期间引发的 serialVersionUID,有人可以提供帮助吗?另外,如果我必须坚持这种方法,并且如果我的代码移动到另一个环境(qa/prod),它是否会根据它在其他环境中的序列化方式而期望不同的 serialVersionUID?
我将不胜感激任何/所有帮助!
【问题讨论】:
标签: java hibernate serialization deserialization