Bonjour,

je viens vous voir car je ne trouve pas de solution à mon problème.

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
22
23
24
25
26
27
28
29
30
31
32
 
public List executerRequeteSQL (String requeteSQL) {
        String methodName = "executerRequeteSQL ()";
 
        List lignes = new ArrayList ();
        if (requeteSQL != null) {
 
            logInfo (methodName, "Requete SQL :\n" + requeteSQL);
 
            Session session = openSession ();
            Transaction transaction = null;            
            try {
                transaction = session.beginTransaction();
 
                Query query = session.createSQLQuery(requeteSQL);
 
                query.setResultTransformer(new SuperBasicTransformerAdapter());
 
                lignes = query.list();
 
                transaction.commit();
            } catch (HibernateException he) {
                if (transaction != null) {
                    transaction.rollback();
                }
                logError (methodName, "Erreur : " + he);
 
            } finally{
                closeSession(session);
            }
        }
        return lignes;
La méthode précédente prend en argument une requête SQL dont on ne connait pas à l'avance le nom, l'ordre et le type des enregistrements.

Je souhaite récupérer à la volée le nom des colonnes de la requête ainsi que les enregistrements. J'utilise un ResultTransformer pour retrouver le nom des colonnes. Cela fonctionne parfaitement mais l'ordre des colonnes n'est pas respecté dans La listes des enregistrements :

Par exemple si je fais :
SELECT 1 AS colonne1, 2 AS colonne2, 3 AS colonne3 FROM DUAL;

La méthode executerRequeteSQL retourne les enregistrements sous la forme d'une liste (une ligne par enregistrement) de Hashmap, la hashmap contenant les couples (nom de la colonne, valeur de la colonne) pour chaque enregistrement.

Mais l'ordre des clés dans le HashMap ne respecte pas l'ordre dans la clause SELECT de la requête SQL. Ainsi j'obtiens dans le HashMap : (colonne3 => 2,colonne1 => 1, colonne2 => 2)

Hors moi je voudrait avoir un HashMap ordonné en fonction de l'ordre d'apparition des colonnes dans la clause SELECT.

Une idée pour faire cela ?

Je pensais au pire à découper la clause SELECT pour retrouver l'ordre des colonnes mais ça risque d'être franchement moche.


EDIT :

Autre très gros problème !

Lorsque je fais :
SELECT '01/01/2012' AS test FROM DUAL;
Je récupère comme nom de colonne test et comme valeur '0'
What the fuck ?!!!