-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: Validation requête HQL
PostPosted: Mon May 25, 2009 7:59 am 
Beginner
Beginner

Joined: Thu Jun 30, 2005 1:04 pm
Posts: 26
Bonjour,

Existe-t'il un moyen de valider automatiquement la structure de requêtes hql nommées sans les executer ?

Je m'explique :
Je chercherai une sorte d'outils (ant comme les hibernate tools) qui récupérerait les requêtes nommées, qui les traduirait en SQL et vérifierait l'adéquation avec la structure de la BD.

Je sais que l'on peut facilement récupérer les requêtes nommées depuis l'objet Configuration.
Il doit pas être trop compliqué de les traduire en SQL
Ensuite il faut comparer avec la structure de la BD.

Voila, merci d'avance pour vos conseils.


Top
 Profile  
 
 Post subject: Re: Validation requête HQL
PostPosted: Wed May 27, 2009 3:55 am 
Hibernate Team
Hibernate Team

Joined: Thu Dec 18, 2003 9:55 am
Posts: 1977
Location: France
Hello Francky,
je pense que le mieux est de te pencher une petite demi heure dans le code source hibernate:
- soit dans la testsuite où tu trouveras les packages de tests de requetes HQL, tu pourrais t'en inspirer.
- soit dans l'initialisation d'hibernate où les requêtes nommées sont parsées et vérifiées

@+
Anthony

_________________
Anthony,
Get value thanks to your skills: http://www.redhat.com/certification


Top
 Profile  
 
 Post subject: Re: Validation requête HQL
PostPosted: Wed May 27, 2009 9:08 am 
Beginner
Beginner

Joined: Thu Jun 30, 2005 1:04 pm
Posts: 26
Merci Anthony,

C'est exactement la piste que je suivais.
Je me suis fait un petit proto en m'inspirant de QueryTranslatorImpl.doCompile
Mais comme je sui dans les méthodes private de hiernate, le doute commençait à m'étreindre.
J'ai aussi cherché sur le net un outils ou une lib faisant cela, sans grand succès.

Ta réponse me rassure, j'étais sur une bonne piste.
par contre je n'ai pas regardé du coté de testsuite.

On est pour l'instant dans une étude de faisabilité.
je continue a fouiller.


Top
 Profile  
 
 Post subject: Re: Validation requête HQL
PostPosted: Tue Nov 24, 2009 8:53 am 
Beginner
Beginner

Joined: Thu Jun 30, 2005 1:04 pm
Posts: 26
Je l'ai fait avec ce code, sa ça peut aider :
Code:
         Ejb3Configuration cfg = new Ejb3Configuration();
         Ejb3Configuration configured = cfg.configure("myPersistenceUnit",
               new HashMap());
         EntityManagerFactory emf = configured.buildEntityManagerFactory();
         EntityManager em = emf.createEntityManager();
         Map enabledFilters = ((SessionImpl) em.getDelegate()).getEnabledFilters();
         QueryPlanCache queryPlanCache = ((SessionFactoryImpl) ((EntityManagerFactoryImpl) emf)
               .getSessionFactory()).getQueryPlanCache();

         Map queries = configured.getNamedQueries();
         for (Iterator iter = queries.values().iterator(); iter.hasNext();) {
            NamedQueryDefinition pNamedQueryDefinition = (NamedQueryDefinition) iter
                  .next();
            HQLQueryPlan plan = queryPlanCache.getHQLQueryPlan(
                  pNamedQueryDefinition.getQuery(), false,
                  enabledFilters);
            String query = plan.getSqlStrings()[0];
            log.info(" HQL : " + pNamedQueryDefinition.getQuery());
            log.info(" SQL : " + query);
            Connection connection = ((SessionImpl) em.getDelegate())
                  .connection();
            Statement ps = connection.createStatement();
            ps.execute("explain plan for " + query + "");

         }


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.