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.