Michele Nasti

Thoughts on what I learn

Leggere la query Hibernate in debug

vi capita mai di aver disabilitato le query Hibernate/Jpa in Tomcat ? Ossia, le query non vengono stampate nella console. In genere si disabilitano altrimenti le prestazioni dell'app diventano scarsissime.

Con Intellij possiamo metterci in debug nel DAO e premere Ctrl+U, poi su Evaluate Code e incolliamo il papiello:

<pre class="lang:default decode:true">CriteriaImpl criteriaImpl = (CriteriaImpl)criteria; SessionImplementor session = criteriaImpl.getSession(); SessionFactoryImplementor factory = session.getFactory(); CriteriaQueryTranslator translator=new CriteriaQueryTranslator(factory,criteriaImpl,criteriaImpl.getEntityOrClassName(),CriteriaQueryTranslator.ROOT_SQL_ALIAS); String[] implementors = factory.getImplementors( criteriaImpl.getEntityOrClassName() );

CriteriaJoinWalker walker = new CriteriaJoinWalker((OuterJoinLoadable)factory.getEntityPersister(implementors[0]), translator, factory, criteriaImpl, criteriaImpl.getEntityOrClassName(), session.getLoadQueryInfluencers() );

String sql=walker.getSQLString();</pre>

Una volta cliccato su “evaluate”, vedrete la query sql che viene mandata al db. Unico problema: non vengono stampati i parametri ...

D'obbligo citare Stack Overflow per questo trick.