我正在尝试更新一些过去由其他人编写的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