2010-02-24 3 views
3

Je cours Hibernate 3.2.0 avec MySQL 5.1. Après la mise à jour du group_concat_max_len dans MySQL (en raison d'une requête de group_concat qui était supérieure à la valeur par défaut), je suis l'exception suivante lors de l'exécution d'une SQLQuery avec une clause de group_concat:Aucun mappage pour LONGVIEWAR dans Hibernate 3.2

« Aucun mappage de Dialect pour le type JDBC: -1 »

-1 est la valeur java.sql.Types pour LONGVIEWAR. Évidemment, en augmentant la valeur group_concat_max_len, les appels à group_concat retournent une valeur LONGVARCHAR. Cela semble être une instance de ce bug:

http://opensource.atlassian.com/projects/hibernate/browse/HHH-3892

Je crois qu'il ya une solution à ce problème dans Hibernate 3.5, mais qui est encore une version de développement, donc je suis hésité à le mettre en production, et je ne sais pas si cela causerait des problèmes pour d'autres parties de mon code de base. Je pourrais aussi simplement utiliser des requêtes JDBC, mais ensuite je dois remplacer chaque instance d'une requête SQL par une clause group_concat.

D'autres suggestions?

Répondre

2

Oui, deux suggestions. Soit:

  1. Patch 3.2.0 Mise en veille prolongée avec les changements de HHH-3892 à savoir obtenir des sources Hibernate, appliquer les correctifs pour r16501, r16823 et r17332) et de construire vous-même mise en veille prolongée.

  2. Ou utiliser un dialecte personnalisé comme suggéré dans HHH-1483:

    public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect { 
        public MySQL5Dialect() { 
         super(); 
         // register additional hibernate types for default use in scalar sqlquery type auto detection 
         // http://opensource.atlassian.com/projects/hibernate/browse/HHH-1483 
         registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName()); 
        }  
    } 
    

Option # 2 est facile à mettre en œuvre et de tester (je ne l'ai pas), alors que l'option 1 est "plus propre", mais exiger (un peu) plus de travail. Personnellement, je choisirais l'option n ° 1 parce que c'est ce que vous obtiendrez avec la version 3.5 et vous garantit ainsi une mise à niveau transparente.

1

La réponse de Pascal semble très bonne, mais j'ai pris un raccourci, pour le moment. L'appel de addScalar pour chaque valeur de retour de requête permet également de résoudre ce problème. Comme il s'est avéré, il n'y avait pas beaucoup d'endroits dans mon code avec un group_concat mais aucun appel explicite à addScalar. Ajout de ces éléments fait disparaître le problème. (Notez que vous devez avoir un appel à addScalar pour chaque valeur de retour, pas seulement ceux provenant d'un group_concat.)

+0

Merci pour cela, j'utilisais un group_concat dans ma requête et j'utilisais addScalar sur toutes mes valeurs de retour éclairci le problème. –

+0

Salut ... avez-vous une idée 'pourquoi' cela allège le problème? – Victor

Questions connexes