情况如下:
开发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 ?
如果有,
是否字段类型配置错误()
你在的实体类是否可以序列化? 是否实现了serializable ?
如果有,
是否字段类型配置错误()
#3
还有result = q.list();
写在 tx.commit(); 之前。
#4
还是我天赋异禀,问题自己搞定了,原来Mysql数据表中的字段是TimeStamp的,我在对应的实体设置时,将字段设置程Timestamp类型的,结果就搞不定了,出现这种反序列化失败的情况。自己曾经往这方面想过,但是也没有去针对Timestamp类型的字段去考虑过,今天,突然就想试一下,结果,嘿,还真对得起咱的操作。谢谢大家了。
#1
你的hibernate实体类实现了序列化接口了没?
public class BaseBusinessClass implements Serializable
#2
q.list() 才是执行查询,如果有问题,肯定是这个时候报。
你在的实体类是否可以序列化? 是否实现了serializable ?
如果有,
是否字段类型配置错误()
你在的实体类是否可以序列化? 是否实现了serializable ?
如果有,
是否字段类型配置错误()
#3
还有result = q.list();
写在 tx.commit(); 之前。
#4
还是我天赋异禀,问题自己搞定了,原来Mysql数据表中的字段是TimeStamp的,我在对应的实体设置时,将字段设置程Timestamp类型的,结果就搞不定了,出现这种反序列化失败的情况。自己曾经往这方面想过,但是也没有去针对Timestamp类型的字段去考虑过,今天,突然就想试一下,结果,嘿,还真对得起咱的操作。谢谢大家了。