# HQL Query funktioniert nicht?



## Tombery (9. Jan 2012)

Hi,


diese Hibernate Query (where clause):


```
String queryString = "from Book as book where book.numberISBN.id='" + numberISBN + "'";
	        List<Book> list = getSession().createQuery(queryString).list();
```

verursacht immer diese Fehlermeldung:

"ERROR JDBCExceptionReporter:101 - Vergleiche zwischen 'BIGINT' und 'CHAR (UCS_BASIC)' werden nicht unterstÃ¼tzt. ..."

Ich denke das hängt irgendwie damit zusammen, dass er wohl die numberISBN (type: long) anscheinend als CHAR sieht, obwohl es eine BIGINT (also long) ist.
Habe mehrere Varianten durchprobiert: "from Book where numberISBN" oder "from Book where numberISBN.id" oder "from Book as book where numberISBN.id"...alles ohne Veränderung.

Wieso funktioniert das so nicht? ???:L

Ich bedanke mich schonmal in Voraus. 

Grüße


----------



## jmarc (9. Jan 2012)

Ich denke, dass kommt von den ' um dein bigint, daher denkt die Datenbank es wäre ein String(char)


----------



## Tombery (9. Jan 2012)

jmarc hat gesagt.:


> Ich denke, dass kommt von den ' um dein bigint, daher denkt die Datenbank es wäre ein String(char)



nein leider nicht, habe die ' schon weggelöscht. 
trotzdem immernoch dieselbe fehlermeldung...

aktuell:
also habe jetzt alle Long´s (referenztyp) in long´s (primitiven typ) umgeändert. 
und jetzt kommt eine andere fehlermeldung:

ERROR JDBCExceptionReporter:101 - Die Spalte 'NUMBER' akzeptiert keinen Nullwert.

eigentlich sollte er keine nullwerte haben. ._.


----------



## nillehammer (10. Jan 2012)

Der Querystring sieht so aus, als wäre numberISBN eine eigene Entity mit eigenen Ids. Stimmt das? Oder ist numberISBN nicht eher selbst ein einfacher String?


----------



## Tombery (10. Jan 2012)

nillehammer hat gesagt.:


> Der Querystring sieht so aus, als wäre numberISBN eine eigene Entity mit eigenen Ids. Stimmt das? Oder ist numberISBN nicht eher selbst ein einfacher String?



nein numberISBN ist ein attribut (typ long) in der klasse book (entity). und dort ist numberISBN die id, gekennzeichnet mit @Id.

ich hatte den Referenztyp angegeben also Long und des jetzt auf long umgeändert. nun scheint er die query anzunehmen, aber es kommt ne neue fehlermeldung:

in der klasse mit der test-database habe ich noch den table Exemplar eingefügt:


```
Person peter = new Person("pegr", "Peter", "Griffin", passwordEncryptionService.toMd5String("PP"), new SimpleDateFormat("MM/dd/yyyy").parse("03/01/1989"));
        EMail email = new EMail("xyz@xyz.de");
        //
        Ressource book = new Book("Analysis", "Hans Förster", "Pearson", 1234567890L);
        Ressource dvd = new DVD("Der Sturm", 12, 120, 1235467980L);
        Exemplar exemplarBook = new Exemplar(book,peter); //eingefügt
        Exemplar exemplarDVD = new Exemplar(dvd,peter); //eingefügt
```

doch der jammert wegen dem Exemplar, Fehlermeldung:

 org.hibernate.exception.DataException: could not insert:[edu.hm.shareit.models.usermanagement.Exemplar]
Bei dem Versuch, VARCHAR () FOR BIT DATA '(Binary data value not displayed)' auf die Länge 255 zu kürzen, ist ein Abschneidefehler aufgetreten.


----------



## SlaterB (10. Jan 2012)

das ist doch jetzt ein komplett anderes Thema oder?

falls nicht bekannt: je exotischer Fehlermeldungen, desto genauer kann man mit ihnen suchen,
ein Ergebnis zurück ins Forum
http://www.java-forum.org/datenbankprogrammierung/113618-byte-datenbank-speichern-jpa.html
klingt aber nach sehr allgemeinen Einstellungen,

welche DB, Treiber-, Hibernate-Versionen usw. benutzt du?


----------



## Tombery (10. Jan 2012)

SlaterB hat gesagt.:


> das ist doch jetzt ein komplett anderes Thema oder?
> 
> falls nicht bekannt: je exotischer Fehlermeldungen, desto genauer kann man mit ihnen suchen,
> ein Ergebnis zurück ins Forum
> ...



hab den forumthread schon gesehen, konnte aber damit nicht wirklich etwas anfangen.

DB = DBUnit 2.4.7
Hibernate 3


----------



## SlaterB (10. Jan 2012)

tja, klingt als wäre Hibernate 4 angebracht,
außerdem vielleicht dein Mapping/ Restprozess überdenken, bisher hast du hier gar nichts dazu geschrieben,
im anderen Thema werden Blobs verwendet, in ObjectStreams geschrieben,
letzteres ist vielleicht nicht gerade ein Ziel, das ist zuzugeben

na mehr kann ich nicht beitragen, vielleicht ein neues Thema wert


----------



## nillehammer (10. Jan 2012)

Zurück nocmal zum Ursprungsthema:


> nein numberISBN ist ein attribut (typ long) in der klasse book (entity). und dort ist numberISBN die id, gekennzeichnet mit @Id.


Wenn numberISBN ein einfaches Long-Attribut von Book ist, dann müsste der Querystring doch wohl eher so aussehen:

```
"from Book as book where book.numberISBN=12345"
```

Und noch zwei Bemerkungen (ich kann mir das Klugs*****en nicht verkneifen ):
- ID-Properties sollten nullable Types sein. Verwende also lieber Long (Wrapper) statt long (primitive).
- Mach ISBN zu einem String, annotiere es evtl mit NaturalId und benutze als "echte" Id lieber einen extra Long.


----------

