IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Utilisation de group_concat avec hibernate


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Points : 52
    Points
    52
    Par défaut Utilisation de group_concat avec hibernate
    Bonjour,

    j'ai une base mysql et hibernate.
    Pour une de mes requetes j'ai besoin de concatener tous les résultats d'une sous requete avec le séparateur qui va bien.

    Quand je l'execute avec mysql, pas de probleme, mais avec hibernate, je me retrouve avec l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
    alors que j'utilise du sql natif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQLQuery query = getSession().createSQLQuery(maQuery);
    query.list();

    Peut on utiliser cette fonction (qui est tout de même bien pratique) avec hibernate?
    Sinon existe t'il un moyen de contournement?

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Montre nous ta requête.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    La voici en simplifié (en réalité j'ai plusieurs sous requêtes utilisant group_concat d'où mon souhait de pouvoir l'utiliser avec hibernate ou de trouver une solution alternative ne nécessitant pas trop de changements):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    select
        id,
        annee,
        libelleTiti,
        (select group_concat(te.code separator " / " )
            from tutu tu, tete te
            where tu.id_toto = id
            and tu.id_tete = te.id_tete)as codeTete,
    from
    	(select
    		t.id_toto as id,
    		t.annee as annee,
    		s.libelle as libelleTiti,
    	from
    		toto t,
    		titi s    
    	where
    		t.annee = '2010'
    		and t.id_titi = s.id_titi
    	group by 
    		gp.id_toto)query
    Sinon est il possible d'ajouter la fonction group_concat à MysqlDialect?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Il est effectivement possible d'étendre la classe MySql5Dialect pour prendre en compte cette fonctionnalité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    import java.sql.Types;
    import org.hibernate.Hibernate;
    import org.hibernate.dialect.function.StandardSQLFunction;
     
    public class MySql5Dialect extends org.hibernate.dialect.MySQL5Dialect{
     
    	public MySql5Dialect() {
    		super();
    	}
     
    	/**
             * {@inheritDoc}
             */
    	@Override
    	protected void registerVarcharTypes() {
    		super.registerVarcharTypes();
    		registerFunction("group_concat", new StandardSQLFunction("group_concat",Hibernate.STRING));
    		registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
    	}
    Et pointer ensuite sur cette classe dans la config hibernate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <prop key="hibernate.dialect">com.monPackage.MySQL5Dialect</prop>
    Reste à tester les éventuels effets de bord.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible d'utiliser les annotations avec hibernate 4.2
    Par momo-ben dans le forum Persistance des données
    Réponses: 2
    Dernier message: 02/11/2013, 12h26
  2. Utilisation de IReport avec Hibernate et MySQL
    Par mazda dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 09/03/2013, 22h14
  3. Réponses: 0
    Dernier message: 17/02/2011, 14h40
  4. pb d'utilisation d'ireport avec Hibernate 3
    Par fabricef.gaston dans le forum iReport
    Réponses: 1
    Dernier message: 03/10/2007, 01h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo