Hibernate-can not be represented as java.sql.Date

0

Witam.
Straciłem już ładnych parę godzin i niestety nie potrafię rozwiązać mojego problemu. Zaczynam poznawać hibernate i niestety mam z tym pierwszy problem chodzi o mapowania już utworzonej i działającej bazy a w sumie to jednej tabeli na początek.
Mam taką tabelę:

CREATE TABLE IF NOT EXISTS `clients` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imie` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `nazwisko` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `adres` varchar(200) COLLATE utf8_polish_ci NOT NULL,
  `pesel` varchar(12) COLLATE utf8_polish_ci NOT NULL,
  `tel` varchar(100) COLLATE utf8_polish_ci NOT NULL,
  `uwagi` text COLLATE utf8_polish_ci,
  `tel2` varchar(100) COLLATE utf8_polish_ci DEFAULT NULL,
  `przystapienie` date DEFAULT NULL,
  `rezygnacja` date DEFAULT NULL,
  `polaczenie` datetime DEFAULT NULL,

  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=108 ;
 

plik
hbm.xml wygląda następująco:

 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2013-10-31 16:00:28 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="Klienci" table="clients">
        <id name="id" type="int">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="imie" type="java.lang.String">
            <column name="imie" />
        </property>
        <property name="nazwisko" type="java.lang.String">
            <column name="nazwisko" />
        </property>
        <property name="adres" type="java.lang.String">
            <column name="adres" />
        </property>
        <property name="pesel" type="java.lang.String">
            <column name="pesel" />
        </property>
        <property name="tel" type="java.lang.String">
            <column name="tel" />
        </property>
        <property name="uwagi" type="text">
            <column name="uwagi" />
        </property>
        <property name="tel2" type="java.lang.String">
            <column name="tel2" />
        </property>
        <property name="przystapienie" type="date">
            <column name="przystapienie" />
        </property>
        <property name="rezygnacja" type="date">
            <column name="rezygnacja" />
        </property>
        <property name="polaczenie" type="org.joda.time.DateTime">
            <column name="polaczenie" sql-type="datetime" />
        </property>
 
    </class>
</hibernate-mapping>

natomiast klasa wygląda tak

 
import java.io.Serializable;
import java.sql.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import org.joda.time.DateTime;
@Entity(name="klienci")
public class Klienci{
@Id
int id;
@Column(name="imie")
String imie;
@Column(name="nazwisko")
String nazwisko;
@Column(name="adres")
String adres;
@Column(name="pesel")
String pesel;
@Column(name="tel")
String tel;
@Column(name="uwagi",columnDefinition = "text")
String uwagi;
@Column(name="te2")
String tel2;
@Column(name="przystapienie")
Date przystapienie;
@Column(name="rezygnacja")
Date rezygnacja;
@Column(name="polaczenie")
DateTime polaczenie;


public int getId(){
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getImie() {
	return imie;
}
public void setImie(String imie) {
	this.imie = imie;
}
public String getNazwisko() {
	return nazwisko;
}
public void setNazwisko(String nazwisko) {
	this.nazwisko = nazwisko;
}
public String getAdres() {
	return adres;
}
public void setAdres(String adres) {
	this.adres = adres;
}
public String getPesel() {
	return pesel;
}
public void setPesel(String pesel) {
	this.pesel = pesel;
}
public String getTel() {
	return tel;
}
public void setTel(String tel) {
	this.tel = tel;
}
public String getUwagi() {
	return uwagi;
}
public void setUwagi(String uwagi) {
	this.uwagi = uwagi;
}
public String getTel2() {
	return tel2;
}
public void setTel2(String tel2) {
	this.tel2 = tel2;
}
public Date getPrzystapienie() {
	return przystapienie;
}
public void setPrzystapienie(Date przystapienie) {
	this.przystapienie = przystapienie;
}
public Date getRezygnacja() {
	return rezygnacja;
}
public void setRezygnacja(Date rezygnacja) {
	this.rezygnacja = rezygnacja;
}
public DateTime getPolaczenie() {
	return polaczenie;
}
public void setPolaczenie(DateTime polaczenie) {
	this.polaczenie = polaczenie;
}


}

Niestety podczas kompilacji dostaję komunikat"

 
Caused by: java.sql.SQLException: Value '1HenrykTestDzialkowa 13/4911111111131234 5171362 Klient na wĂłzku
0000-00-00
0000-00-002012-08-16 12:06:06 'can not be represented as java.sql.Date

Wydaje mi się że problem tkwi w mapowaniu daty ale przeglądając to forum wszędzie widziałem podobnie to zrobione.
Proszę o pomoc bo mnie już nieźle strzela.
Pozdrawiam
KB

Chyba ten błąd może wynikać z tego że nie każdy rekord ma uzupełnione pole przystąpienie i jest tam wartość 000000 ( czy da się to jakoś ominąć ?)

0
  1. Nie powinieneś mieć jednocześnie mapowania xmlowego i adnotacyjnego
  2. Mi ten błąd wygląda na problem z pchaniem do bazy złych wartości. Na jakim zapytaniu ci to leci?

edit: Brak mi słów. Daj tam nulla zamiast wartości z d**y.

0

Wielkie dzięki, taka baza że tak powiem została "zastana".
Pozdrawiam

Jeszcze jedno lamerskie pytanie.
Po poprawkach teraz pojawia mi się inny komunikat.
Hibernate: select this_.id as id1_0_0_, this_.imie as imie2_0_0_, this_.nazwisko as nazwisko3_0_0_, this_.adres as adres4_0_0_, this_.pesel as pesel5_0_0_, this_.tel as tel6_0_0_, this_.uwagi as uwagi7_0_0_, this_.tel2 as tel8_0_0_, this_.przystapienie as przystap9_0_0_, this_.rezygnacja as rezygna10_0_0_, this_.polaczenie as polacze11_0_0_ from clients_beneficjent this_
org.hibernate.type.SerializationException: could not deserialize
Czy mógłbyś mi jeszcze w tym pomóc.
Pozdrawiam

0

Nie bardzo bo nie widzę z w tym twoim komunikacie czego nie mógł deserializować...

0

To jest wszystko co mi wywala konsola:

 
ru 03, 2013 3:23:42 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
gru 03, 2013 3:23:42 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.7.Final}
gru 03, 2013 3:23:42 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
gru 03, 2013 3:23:42 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
gru 03, 2013 3:23:42 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
gru 03, 2013 3:23:42 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
gru 03, 2013 3:23:42 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
gru 03, 2013 3:23:42 PM org.hibernate.cfg.Configuration addResource
INFO: HHH000221: Reading mappings from resource: BeneficjentInfo.hbm.xml
gru 03, 2013 3:23:42 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
gru 03, 2013 3:23:42 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
gru 03, 2013 3:23:42 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
gru 03, 2013 3:23:42 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20
gru 03, 2013 3:23:42 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: false
gru 03, 2013 3:23:42 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://192.168.1.12/django]
gru 03, 2013 3:23:42 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=hibernate, password=****}
gru 03, 2013 3:23:43 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
gru 03, 2013 3:23:43 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
gru 03, 2013 3:23:43 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
gru 03, 2013 3:23:43 PM org.hibernate.tool.hbm2ddl.SchemaValidator validate
INFO: HHH000229: Running schema validator
gru 03, 2013 3:23:43 PM org.hibernate.tool.hbm2ddl.SchemaValidator validate
INFO: HHH000102: Fetching database metadata
gru 03, 2013 3:23:43 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000261: Table found: django.clients_beneficjent
gru 03, 2013 3:23:43 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000037: Columns: [adres, tel, id, tel2, pesel, rezygnacja, imie, uwagi, polaczenie, nazwisko, przystapienie]
Hibernate: select this_.id as id1_0_0_, this_.imie as imie2_0_0_, this_.nazwisko as nazwisko3_0_0_, this_.adres as adres4_0_0_, this_.pesel as pesel5_0_0_, this_.tel as tel6_0_0_, this_.uwagi as uwagi7_0_0_, this_.tel2 as tel8_0_0_, this_.przystapienie as przystap9_0_0_, this_.rezygnacja as rezygna10_0_0_, this_.polaczenie as polacze11_0_0_,  from clients_beneficjent this_
org.hibernate.type.SerializationException: could not deserialize
	at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:262)
	at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:306)
	at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:140)
	at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:121)
	at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:44)
	at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:67)
	at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
	at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261)
	at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
	at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247)
	at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:332)
	at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2926)
	at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1673)
	at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1605)
	at org.hibernate.loader.Loader.getRow(Loader.java:1505)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:713)
	at org.hibernate.loader.Loader.processResultSet(Loader.java:943)
	at org.hibernate.loader.Loader.doQuery(Loader.java:911)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342)
	at org.hibernate.loader.Loader.doList(Loader.java:2526)
	at org.hibernate.loader.Loader.doList(Loader.java:2512)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342)
	at org.hibernate.loader.Loader.list(Loader.java:2337)
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:124)
	at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1668)
	at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374)
	at Main.displaySysInfo(Main.java:41)
	at Main$1.run(Main.java:28)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:688)
	at java.awt.EventQueue$3.run(EventQueue.java:686)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:697)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.io.StreamCorruptedException: invalid stream header: 32303132
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
	at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:328)
	at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:318)
	at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:237)
	... 41 more
0

A jak dodasz implements Serializable do klas encyjnych? Bo może to cache tutaj miesza próbując serializować/deserializować te klasy?

0

Niestety jak dodam implements Serializable nic to nie zmienia.

0

Z tego co mi się udało ustalić to problem chyba wynika przez pole w bazie polaczenie typu datatime. Gdy go wywalę wszystko śmiga. I teraz mam pytanie w jaki sposób mam poprawnie zmapować pole datatime. Z tego co wyszukałem polecano użyć joda-time co zresztą zrobiłem niestety nic mi to nie dało ( może źle to zrobiłem). Pozdrawiam

0
KBK napisał(a):

Z tego co mi się udało ustalić to problem chyba wynika przez pole w bazie polaczenie typu datatime. Gdy go wywalę wszystko śmiga. I teraz mam pytanie w jaki sposób mam poprawnie zmapować pole datatime. Z tego co wyszukałem polecano użyć joda-time co zresztą zrobiłem niestety nic mi to nie dało ( może źle to zrobiłem). Pozdrawiam

Ok. Zrobione. Wykorzystałem Timestamp. Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1