求助: java.io.StreamCorruptedException: invalid stream header: 32303134

时间:2022-01-21 23:18:00
最近,在做一个j2ee的开发,遇到了一个问题,耽误了我一天的时间,不知道该怎么解决,求助大家!

情况如下:
开发IDE:Intelij IDEA
框架 :使用SSH框架开发。 spring 最新版 4.1.2 ,struts 2.3,Hibernate 4.3.7

问题点:

            Transaction tx = sess.beginTransaction();
            String sql = "from NewsType ";
            Query q = sess.createQuery(sql);
            tx.commit();
            result = q.list();
 
问题就在最后一句,我debug时,发现q中的size==0,而且只要q.list()就出问题

具体错误: Caused by: java.io.StreamCorruptedException: invalid stream header: 32303134

整体Exception如下:

org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:262)
at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:306)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:155)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:130)
.......
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
  Caused by: java.io.StreamCorruptedException: invalid stream header: 32303134
[code=java]at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:328)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:318)
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:237)
... 103 more

4 个解决方案

#1




你的hibernate实体类实现了序列化接口了没?

public class BaseBusinessClass implements Serializable

#2


q.list() 才是执行查询,如果有问题,肯定是这个时候报。
你在的实体类是否可以序列化? 是否实现了serializable ? 
如果有,
是否字段类型配置错误()

#3



还有result = q.list();
写在 tx.commit(); 之前。

#4


还是我天赋异禀,问题自己搞定了,原来Mysql数据表中的字段是TimeStamp的,我在对应的实体设置时,将字段设置程Timestamp类型的,结果就搞不定了,出现这种反序列化失败的情况。自己曾经往这方面想过,但是也没有去针对Timestamp类型的字段去考虑过,今天,突然就想试一下,结果,嘿,还真对得起咱的操作。谢谢大家了。

#1




你的hibernate实体类实现了序列化接口了没?

public class BaseBusinessClass implements Serializable

#2


q.list() 才是执行查询,如果有问题,肯定是这个时候报。
你在的实体类是否可以序列化? 是否实现了serializable ? 
如果有,
是否字段类型配置错误()

#3



还有result = q.list();
写在 tx.commit(); 之前。

#4


还是我天赋异禀,问题自己搞定了,原来Mysql数据表中的字段是TimeStamp的,我在对应的实体设置时,将字段设置程Timestamp类型的,结果就搞不定了,出现这种反序列化失败的情况。自己曾经往这方面想过,但是也没有去针对Timestamp类型的字段去考虑过,今天,突然就想试一下,结果,嘿,还真对得起咱的操作。谢谢大家了。