Hibernate 冬眠:“;无法从结果集中读取列值。。。无法反序列化“;
我有一个Java类,我想将其持久化到数据库:Hibernate 冬眠:“;无法从结果集中读取列值。。。无法反序列化“;,hibernate,serialization,Hibernate,Serialization,我有一个Java类,我想将其持久化到数据库: public class ClassA implements Serializable { // // other fields not shown // private ObjectType objectType; // an enum that indicates the actual class stored in the "object" field private Object object; }
public class ClassA implements Serializable {
//
// other fields not shown
//
private ObjectType objectType; // an enum that indicates the actual class stored in the "object" field
private Object object;
}
以下是Hibernate映射文件:
<hibernate-mapping default-lazy="false">
<class name="x.y.z.ClassA" table="ClassA">
<!--
other properties removed
-->
<property name="objectType" column="OBJECTTYPE">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">
x.y.z.ClassA$ObjectType
</param>
<param name="type">12</param>
</type>
</property>
<property name="object" column="OBJECT" type="serializable"/>
</class>
</hibernate-mapping>
如果Hibernate将对象存储在longblob列中时对象没有被压缩,那么我猜这就是导致“无法反序列化”错误的原因。我知道它大于255字节,但MySQL Workbench说它有255字节长,所以该对象一定是因为某种原因被截断了
但是如果对象正在被压缩,那么Hibernate可能无法对其进行反序列化,因为它只是一个java.lang.object类型,并且不知道实际的对象类型是什么。如果是这种情况,那么有没有办法为Hibernate编写自定义反序列化程序?因为实际对象类型由“objectType”字段指示,所以自定义反序列化程序可以检查“objectType”字段,然后知道如何反序列化“object”字段。结果是Hibernate默认将longblob列的最大大小设置为255字节。我将映射文件中的行更改为:
<property name="object" column="OBJECT" type="serializable" length="2147483647"/>
这就解决了问题
<property name="object" column="OBJECT" type="serializable" length="2147483647"/>