2012-09-28 3 views
3

J'exécute une procédure stockée avec la méthode native Hibernate, cette procédure stockée crée des noms de colonne en fonction d'un autre ID de table. Ses colonnes ressemblent donc à ceci:Obtention dynamique de noms de colonnes à partir du résultat de la requête native Hibernate

| id | ... d'autres colonnes ... | nom | c_1 | c_2 | c_4 | c_ .. |

Si je l'appelle Query.getResultList() retourne List<Object[]>, et je ne sais pas les noms de colonnes. Je dois connaître les noms des colonnes (et l'index des colonnes correspondant) pour continuer ma logique métier. Je ne peux pas non plus utiliser EntityManager.createNativeQuery(String s, Class aClass) car ce n'est pas une classe POJO.

Actuellement, je reçois List<Object[]> sans problème, mais j'ai besoin, par exemple, Map<String,Object[]> nom de colonne comme une clé et des valeurs de colonne comme un tableau d'objets.

Comment puis-je obtenir tous les noms de colonnes avec leurs valeurs?

Répondre

0

(Ceci est juste une idée, je ne l'ai pas testé et il a besoin de l'API Criteria..)

Si vous parvenez à obtenir le résultat que List<javax.persistence.Tuple>, vous pouvez prendre un Tuple et appeler getElements() sur elle - vous obtiendrez une liste de TupleElement<?> sur laquelle vous pouvez appeler getAlias(). Vraisemblablement, ce sera le nom de la colonne. Mais je ne suis pas sûr à 100% et ça ne marchera pas s'il n'y a pas de tuples (résultats) retournés, mais je pense que ça vaut le coup d'essayer. Voir 9.2. Tuple criteria queries.

Pour cette approche, cela pourrait aider:

Questions connexes