Java Hibernate反序列化问题

Java Hibernate反序列化问题,java,hibernate,serialization,deserialization,Java,Hibernate,Serialization,Deserialization,我试图更新一些hibernate代码,这些代码过去是由其他人编写的,现在遇到了反序列化问题。按照原始代码的编写方式,它没有显式声明serialVersionUID,只是实现了Serializable接口- public class SamplePOJO implements Serializable { 现在,我正在尝试向表中添加一个新列,并将其映射到此对象。一: 更改表以创建新列 更新对象以包含新的字符串对象和getter/setter 为此,以及 更新了.hbm文件以将db表列与对象映射

我试图更新一些hibernate代码,这些代码过去是由其他人编写的,现在遇到了反序列化问题。按照原始代码的编写方式,它没有显式声明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>"
    

    从字节[]反序列化时出错,由x.y.SamplePOJO引起;本地类不兼容:stream classdesc serialVersionUID=7997933458932550222,本地类serialVersionUID=首先回答第二个问题,JVM在运行时生成serialVersionUID由Java对象序列化规范指定运行时是可预测的,它在java编译器之间可能有所不同,因为它取决于特定于编译器实现的类文件的组成。因此,编译的代码不应在不同环境中的运行时生成不同的SerialVersionUID。您可以使用JDK中的serialver命令来计算生成的运行时类的SerialVersionId


    您谈到在客户端和服务器上安装hibernate jar,这听起来像是在两个不同的JVM之间序列化实体,您确定客户端有更新的实体类吗?错误表明您正在尝试反序列化字节[]通过序列化不同版本的类文件生成。您需要确保反序列化到相同版本的类中,或者将serialVersionUID添加到类中。

    谢谢。您澄清了我的疑问。