Hi,
today we spent quite some hours tracking down a mapping error of mine (Missing UserType definition). The exception message we got was "SerializationException: could not deserialize". Unfortunately there was no hint where to look at in the mappings.

The property in the Java class called Loan was:
...
private MonetaryAmount sum;
...

The (wrong) mapping of mine was:
..
<typedef class="com.my.company.cfg.usertypes.MonetaryAmountUserType " name="MonetaryAmount"/>
..
<property name="sum" column="LOAN_SUM"/>
..

My error was: I forgot the UserType in the property description. And I recieved the followin Exception:
org.hibernate.type.SerializationException: could not deserialize
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:211)
    at org.hibernate.util.SerializationHelper.deserialize( SerializationHelper.java:234)
    at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:78)
    at org.hibernate.type.SerializableType.get(SerializableType.java:39)
    at org.hibernate.type.NullableType.nullSafeGet (NullableType.java:113)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate (AbstractEntityPersister.java:1898)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1372)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1300)
    at org.hibernate.loader.Loader.getRow (Loader.java:1197)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
    at org.hibernate.loader.Loader.doQuery(Loader.java:689)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections (Loader.java:223)
    at org.hibernate.loader.Loader.doList(Loader.java:2147)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2026)
    at org.hibernate.loader.Loader.list(Loader.java:2021)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:369)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:298)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java :137)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1014)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at com.ing.diba.HibernateSpielklasse.main(HibernateSpielklasse.java:20)
Caused by: java.io.StreamCorruptedException: invalid stream header
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:737)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
    at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:246)
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:203)
    ... 22 more


I have created the following patch that gives the developer a hint where to look at:

Wrap line 1898 of AbstractEntityPersister (Hibernate 3.1 RC 3 Codebase) with the following statement:
try {
  values[i] = types[i].hydrate( propertyResultSet, cols, session, object );
} catch (HibernateException e) {
  throw new HibernateException("Problem hydrating property " + propNames[i] + " of " + object.getClass().getName(), e);
}

Maybe you take some minutes to look at that patch. I would consider it very useful to get a clear hint where there might be an error in my mappings.

Thanks,
Mike Ploed

Reply via email to