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:

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();

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.

Related Posts: