Quelqu'un peut-il me signaler, comment puis-je analyser/évaluer HQL et obtenir la carte où la clé est l'alias et la valeur - nom de classe complet qualifié.Hibernate: Parse/Translate HQL FROM partie pour obtenir l'alias de classe paires, nom de classe
E.g. pour HQL
SELECT a.id de Foo une INNER JOIN a.test b
Je souhaite avoir des paires:
a, package1.Foo
b. package2.TestClassName
Il est relativement facile à faire pour jeu de résultats
HQLQueryPlan hqlPlan = ((SessionFactoryImpl)sf).getQueryPlanCache().getHQLQueryPlan(getQueryString(), false, ((SessionImpl)session).getEnabledFilters()); String[] aliases = hqlPlan.getReturnMetadata().getReturnAliases(); Type[] types = hqlPlan.getReturnMetadata().getReturnTypes();
Voir details here.
Je génère dynamiquement HQL basé sur notre API interne (volets de critères, etc.) et pour les conditions de filtrage (c'est-à-dire partie WHERE) besoin de connaître l'alias pour chaque classe dans le HQL. – FoxyBOA
Ressemble à SqlTokenTypes.ALIAS_REF n'est pas ce que je cherche. Dans mon exemple ci-dessus, le résultat sera "a, paquet1.Foo", mais j'ai aussi besoin de "b, paquet2.TestClassName". Je veux dire ALIAS_REF processus "SELECT" partie au lieu de "FROM". – FoxyBOA
Concernant votre question sur l'utilisation de l'API Criteria. J'ai deux raisons: 1. Legacy code 2. HQL vous permet de construire ce que l'on appelle des requêtes de rapport (extraire exactement les données dont vous avez besoin et ne pas construire l'objet entier). Voir le lien pour plus de détails http://rongou.blogspot.com/2005/08/hibernate-report-query.html – FoxyBOA