hibernate 自定义数据类型 在实现序列化接口后还是抛出不能反序列化的异常

问题描述

异常:org.hibernate.type.SerializationException:couldnotdeserializeatorg.hibernate.util.SerializationHelper.doDeserialize(SerializationHelper.java:262)atorg.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:306)atorg.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:130)atorg.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:116)atorg.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:39)atorg.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:62)atorg.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)atorg.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)atorg.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)atorg.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:229)atorg.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:330)atorg.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2265)atorg.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527)atorg.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455)atorg.hibernate.loader.Loader.getRow(Loader.java:1355)atorg.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611)atorg.hibernate.loader.Loader.doQuery(Loader.java:829)atorg.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)atorg.hibernate.loader.Loader.loadEntity(Loader.java:2037)atorg.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)atorg.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)atorg.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3268)atorg.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)atorg.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)atorg.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)atorg.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:147)atorg.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1091)atorg.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:1027)atorg.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:176)atorg.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)atorg.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)atcode.StdInfo_$$_javassist_0.getEmail(StdInfo_$$_javassist_0.java)attest.HibernateTest.insert3(HibernateTest.java:82)attest.HibernateTest.testInsert(HibernateTest.java:98)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)atjava.lang.reflect.Method.invoke(UnknownSource)atjunit.framework.TestCase.runTest(TestCase.java:168)atjunit.framework.TestCase.runBare(TestCase.java:134)atjunit.framework.TestResult$1.protect(TestResult.java:110)atjunit.framework.TestResult.runProtected(TestResult.java:128)atjunit.framework.TestResult.run(TestResult.java:113)atjunit.framework.TestCase.run(TestCase.java:124)atjunit.framework.TestSuite.runTest(TestSuite.java:232)atjunit.framework.TestSuite.run(TestSuite.java:227)atorg.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)atorg.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)atorg.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)Causedby:java.io.StreamCorruptedException:invalidstreamheader:313B323Batjava.io.ObjectInputStream.readStreamHeader(UnknownSource)atjava.io.ObjectInputStream.<init>(UnknownSource)atorg.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:328)atorg.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:318)atorg.hibernate.util.SerializationHelper.doDeserialize(SerializationHelper.java:237)...52morehbm.xml<hibernate-mapping><classname="code.StdInfo"table="std_info"catalog="sample"><idname="id"type="string"><columnname="id"length="32"/><generatorclass="uuid.hex"/></id><propertyname="name"type="string"><columnname="name"length="100"/></property><propertyname="age"type="int"><columnname="age"not-null="true"/></property><propertyname="email"type="test.StdType"><columnname="email"/></property></class></hibernate-mapping>类publicclassStdTypeimplementsType,Serializable{privateListemails;privatestaticfinalchartempChar=';';privatestaticfinalint[]types={Types.VARCHAR};@Overridepublicint[]sqlTypes(){//TODOAuto-generatedmethodstubreturntypes;}@OverridepublicClassreturnedClass(){//TODOAuto-generatedmethodstubreturnList.class;}@Overridepublicbooleanequals(Objecta,Objectb){//TODOAuto-generatedmethodstubif(a==b){returntrue;}elseif(a!=null&&b!=null){ListaList=(List)a;ListbList=(List)b;if(aList.size()!=bList.size()){returnfalse;}else{intsize=aList.size();for(inti=0;i<size;i++){StringaString=(String)aList.get(i);StringbString=(String)bList.get(i);if(!aString.equals(bString)){returnfalse;}}returntrue;}}else{returnfalse;}}@OverridepublicObjectnullSafeGet(ResultSetrs,String[]name,Objectowner)throwsHibernateException,SQLException{//TODOAuto-generatedmethodstubStringvalue=null;value=(String)Hibernate.STRING.nullSafeGet(rs,name[0]);if(value!=null){returnparse(value);}else{returnnull;}}@OverridepublicvoidnullSafeSet(PreparedStatementst,Objectvalue,intindex)throwsHibernateException,SQLException{//TODOAuto-generatedmethodstubif(value!=null){Stringstr=assemble((List)value);Hibernate.STRING.nullSafeSet(st,str,index);}else{}}@OverridepublicObjectdeepCopy(Objectvalue){//TODOAuto-generatedmethodstubListsource=(List)value;Listcopy=newArrayList();copy.addAll(source);returncopy;}@OverridepublicbooleanisMutable(){//TODOAuto-generatedmethodstubreturnfalse;}privateListparse(Stringvalue){ArrayList<String>list=newArrayList<String>();intstartIndex=0;intindex=-1;do{index=value.indexOf(tempChar,startIndex);if(index!=-1){list.add(value.substring(startIndex,index));startIndex=index+1;}else{list.add(value.substring(startIndex));}}while(index!=-1);returnlist;}privateStringassemble(Listlist){StringBufferbuffer=newStringBuffer();for(inti=0;i<list.size();i++){buffer.append((String)list.get(i));if(i<list.size()-1){buffer.append(tempChar);}}returnbuffer.toString();}}

解决方案

解决方案二:
这就不懂了?是不是还有没实现的然后互相调用了?
解决方案三:
引用1楼dyllove98的回复:

这就不懂了?是不是还有没实现的然后互相调用了?

什么意思?
解决方案四:
没有人知道吗?
解决方案五:
该回复于2010-11-26 13:08:54被版主删除
解决方案六:
问题看的不是很明白<propertyname="email"type="test.StdType"><columnname="email"/></property>StdType是你自定义的类型吧,如果StdType是一个对象类型,那这个得用many-to-0ne
解决方案七:
<many-to-onename="email"class="test.StdType"><columnname="EMP_email_ID"/></many-to-one>试试看吧,序列化器里面是怎么写的能否贴出来看看
解决方案八:
该回复于2010-12-08 09:49:58被版主删除
解决方案九:
不懂,看来我还得好好的修炼啊

时间: 2024-12-24 14:57:54

hibernate 自定义数据类型 在实现序列化接口后还是抛出不能反序列化的异常的相关文章

自定义Hadoop的可序列化类

java原生语言中要想一个自定义类可序列化,很简单,只要让这个类实现java.io.Serializable接口就可以了,但是在Hadoop框架中,要想让自定义类可以被序列化,我们必须手动让其实现WritableCompable接口并且实现write(),readFields(),compareTo()方法. 下面就是一个我们自定义的可序列化的类: /* */ package com.charles.writable; import java.io.DataInput; import java.

jsp怎样实现文件下载后抛出这个异常

问题描述 Error!ClientAbortException:java.net.SocketException:Connectionresetbypeer:socketwriteerroratorg.apache.coyote.tomcat5.OutputBuffer.realWriteBytes(OutputBuffer.java:373)atorg.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:398)atorg.a

hibernate之自定义数据类型

简介     Hibernate的强大用过的童鞋肯定会知道的,通过OR映射我们可以很方便的实现数据库操作,Hibernate对我们一些类型的映射都提供了很好的支持,但是显然也有不给力的地方,比如简单的注册,一个人可能有好多邮箱,对于这个问题怎么做呢?有人说简单,可以另外开一张表,恩,很不错,确实可以,可是这样有时候可能小题大作了.也有人说,直接将邮箱拼接成字符串然后在存储,这个想法也很好,但在我们读出来的时候就要再进行一次解析操作,将EMAIL还原,这些都要求我们编程人员自己完成.那么Hiber

自定义数据类型

除了使用系统提供的数据类型外,用户还可以根据需要用自定义的数据类型来定义表的列或声明变量. 7.3.1 用Enterprise Manager 创建用户自定义数据类型用Enterprise Manager 创建用户自定义数据类型的方法是:在Enterprise Manager 中选择要创建用户自定义类型的数据库,在数据库对象"User Defined Data Types"上单击右键,从开始菜单中选择"New User Defined Data Type"选项,就会

MS SQL基础教程:自定义数据类型

除了使用系统提供的数据类型外,用户还可以根据需要用自定义的数据类型来定义表的列或声明变量. 7.3.1 用Enterprise Manager 创建用户自定义数据类型 用Enterprise Manager 创建用户自定义数据类型的方法是:在Enterprise Manager 中选择要创建用户自定义类型的数据库,在数据库对象"User Defined Data Types"上单击右键,从开始菜单中选择"New User Defined Data Type"选项,就

类调用窗体控件-关于一个C++动态库转换成C#接口后,消息接收的问题!急急急!

问题描述 关于一个C++动态库转换成C#接口后,消息接收的问题!急急急! #ifndef USBDLL_H #define USBDLL_H #ifdef USBDLL_EXPORTS #define USBDLL_API __declspec(dllexport) #else #define USBDLL_API __declspec(dllimport) #endif #include #include #define RECORD_LOCAL 0 #define RECORD_TALK 1

hibernate系列(五)Session接口方法

Session接口方法主要有save.persist.load.get.update.saveOrUpdat.merge.delete等,这里主要是对我看hibernate书籍的一个实践加总结.  首先是save()方法:  以之前的Customer和Order为例,看下类文件:  ? 1 2 3 4 5 6 7 8 9 public class Customer {       private Long id;     private String name;     private Stri

Hibernate中数据类型,数组怎么用?

问题描述 Hibernate中数据类型,数组怎么用?能举个例子最好,谢谢! 解决方案 这个要用自定义类型,继承org.hibernate.usertype.UserType类.存储格式可以自己定制,比如逗号分隔.配置的时候指定用自己定义的类型,比如@Type(type = "com.XXX.StringArrayType")解决方案二:抛开问题不说.我想问问, 数组类型的东西怎么对应到数据库的记录.不好意思,我是请教请教...

修改自定义数据类型精度

数据|数据类型 /*--修改自定义数据类型精度的示例      自定义数据类型一旦被引用,就不能再修改和删除,如果要修改数据的精度,就非常麻烦,下面的示例演示了如何修改      假设要修改的自定义变量名为aa --*/ --1.修改自定义变量类型的名称exec sp_rename 'aa','aa_bak','USERDATATYPE'go --2.新增自定义变量(按新的精度)EXEC sp_addtype N'aa', N'numeric(20,2)', N'not null'go --3.