Baza danych + Hibernate - złe mapowanie
Witam.
Pracuję nad aplikacją która korzysta z bady danych Symfoni.
Po wygenerowaniu DDF'ów mam dostęp do bazy poprzez Pervasive Control Center.
Moja aplikacja jest pisana w Javie, w związku z czym muszę użyć JDBC aby połączyć się z bazą danych.
Korzystam także z Hibernate aby nie musieć pisać czystych zapytań SQL'owych, a korzystać z wygenerowanych obiektów.
Po wygenerowaniu klas na podstawie table, w miejscach gdzie kolumny są typu "date", dostaję pole klasy Serializable.
Gdy probuję pobrać wszystkie rekordy z basy, dostaje błąd:
Kod:
Exception in thread "main" 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:254)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:250)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:230)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:331)
at org.hibernate.type.ComponentType.hydrate(ComponentType.java:593)
at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:668)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:606)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2542)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at pl.lanox.test.Test.main(Test.java:19)
Caused by: java.io.StreamCorruptedException: invalid stream header: 32303036
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
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)
... 22 more
hibernate.cfg.xml
Kod:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.pervasive.jdbc.v2.Driver</property>
<property name="hibernate.connection.password">pass</property>
<property name="hibernate.connection.url">jdbc:pervasive://10.10.10.4/NOWY3</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
Pobieranie listy:
Kod:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Kh> list = (List<Kh>) session.createCriteria(Kh.class).list();
session.getTransaction().commit();
Dziwną rzeczą jest to, że po zrobieniu połączenia z bazą danych w Eclipsie, kolumna ma typ "9" (pozostałe są poprawne np. int, varchar)
Gdy probuję na sztywno zmienić typ z Serializable na Date lub String, dostaje listę pustych obiektów.
Zmiana dialektu także nie pomaga.
Próbowałem dodać coś do bazy w celach testowych, i działa.
Co robię źle lub czego nie robie ?
Będę wdzięczny za każdą wskazówkę.
Mariusz Sitarz