Heute habe ich in Hibernate mit nativen SQL-Statements auf einer MySQL Datenbank gearbeitet. Plötzlich begrüßte mich Hibernate mit der schönen Fehlermeldung No Dialect mapping for JDBC type: -1

Auf der Suche nach einer Lösung bin ich auf einen älteren Blogeintrag von Johannes Köber gestoßen. Dieser löste das Problem in dem er den MySQL-Datentyp einer Spalte von TEXT nach VARCHAR(10000) veränderte.

Nun ja, keine wirklich schöne Lösung aber dafür ein erster Anhaltspunkt, dass es wohl mit, für Hibernate unbekannten Datentypen zusammenhängen muss. Und tatsächlich nutzte auch ich für eine Spalte den Datentyp TEXT. Aber ist die Veränderung des Datentypen wirklich die einzige Lösung?

Im Hibernate JIRA habe ich schließlich einen entscheidenen Hinweis entdeckt, konkret im Bug HHH-2877. Hier wird als Workaround, die Verwendung von addScalar vorgeschlagen, was bei mir auch funktionierte.

Einem createSQLQuery-Aufruf muss man lediglich die Methode addScalar aufrufen und Hibernate mitteilen, welchen Datentyp die entsprechende Ergebnisspalte nutzen will.

Aus:

Query query = session.createSQLQuery("SELECT comment from users where id=:user_id");

wird:

Query query = session.createSQLQuery("SELECT comment from users where id=:user_id").addScalar("comment", Hibernate.TEXT);

Im Übrigen wurde der Bug in Hibernate 3.5 bereits behoben. Bereits ist gut, die erste Erwähnung ist vom Februar 2006, behoben wurde der Bug im August 2009 ...

blogroll
tags