异常:
org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.util.SerializationHelper.doDeserialize(SerializationHelper.java:262)
at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:306)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:130)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:116)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:39)
at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:62)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:229)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:330)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2265)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455)
at org.hibernate.loader.Loader.getRow(Loader.java:1355)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.loadEntity(Loader.java:2037)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3268)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:147)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1091)
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:1027)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:176)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at code.StdInfo_$$_javassist_0.getEmail(StdInfo_$$_javassist_0.java)
at test.HibernateTest.insert3(HibernateTest.java:82)
at test.HibernateTest.testInsert(HibernateTest.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.StreamCorruptedException: invalid stream header: 313B323B
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:328)
at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:318)
at org.hibernate.util.SerializationHelper.doDeserialize(SerializationHelper.java:237)
... 52 morehbm.xml<hibernate-mapping>
    <class name="code.StdInfo" table="std_info" catalog="sample">
        <id name="id" type="string">
            <column name="id" length="32" />
            <generator class="uuid.hex" />
        </id>
        <property name="name" type="string">
            <column name="name" length="100" />
        </property>
        <property name="age" type="int">
            <column name="age" not-null="true" />
        </property>
        <property name="email" type="test.StdType">
            <column name="email"/>
        </property>
    </class>
</hibernate-mapping>类
public class StdType implements Type,Serializable { private List emails; private static final char tempChar = ';'; private static final int[] types = { Types.VARCHAR }; @Override
public int[] sqlTypes() {
// TODO Auto-generated method stub
return types;
} @Override
public Class returnedClass() {
// TODO Auto-generated method stub
return List.class;
} @Override
public boolean equals(Object a, Object b) {
// TODO Auto-generated method stub if (a == b) {
return true;
} else if (a != null && b != null) {
List aList = (List) a;
List bList = (List) b; if (aList.size() != bList.size()) {
return false;
} else {
int size = aList.size(); for (int i = 0; i < size; i++) {
String aString = (String) aList.get(i);
String bString = (String) bList.get(i); if (!aString.equals(bString)) {
return false;
}
} return true;
}
} else {
return false;
}
} @Override
public Object nullSafeGet(ResultSet rs, String[] name, Object owner)
throws HibernateException, SQLException {
// TODO Auto-generated method stub
String value = null; value = (String) Hibernate.STRING.nullSafeGet(rs, name[0]); if (value != null) {
return parse(value);
} else {
return null;
}
} @Override
public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
// TODO Auto-generated method stub
if (value != null) {
String str = assemble((List) value); Hibernate.STRING.nullSafeSet(st, str, index); } else { } } @Override
public Object deepCopy(Object value) {
// TODO Auto-generated method stub
List source = (List) value;
List copy = new ArrayList(); copy.addAll(source); return copy;
} @Override
public boolean isMutable() {
// TODO Auto-generated method stub
return false;
} private List parse(String value) {
ArrayList<String> list = new ArrayList<String>(); int startIndex = 0;
int index = -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); return list;
} private String assemble(List list) {
StringBuffer buffer = new StringBuffer(); for (int i = 0; i < list.size(); i++) {
buffer.append((String) list.get(i)); if (i < list.size() - 1) {
buffer.append(tempChar);
}
} return buffer.toString();
}}

解决方案 »

  1.   

    问题看的不是很明白
     <property name="email" type="test.StdType">
      <column name="email"/>
      </property>
     StdType是你自定义的类型吧,如果StdType是一个对象类型,那这个得用 many-to -0ne
      

  2.   

    <many-to-one name="email" class="test.StdType" >
                <column name="EMP_email_ID" />
    </many-to-one>
    试试看吧, 序列化器里面是怎么写的 能否贴出来看看