Intercepte as instruções JDBC no banco de dados usando P6Spy em um aplicativo de hibernação
Pergunta
Estou desenvolvendo um aplicativo de console de hibernação e consulte este artigo http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/ configurar o P6Spy para ver qual é o valor real do "(?)" do SQL gerado pelo Hibernate.
A configuração deve funcionar bem, pois posso ver mensagens de informação/depuração emitidas pelo P6Spy durante a inicialização do aplicativo.Porém, depois disso, o P6Spy parece não conseguir interceptar nenhuma instrução JDBC.Do log gerado pelo hibernate (por exemplo: Hibernate: insert into Module (projectName, moduleName, projectId) values (?, ?, ?)
), pode-se ter certeza de que as instruções JDBC já foram enviadas ao banco de dados.
A seguir está minha configuração:
hibernate.cfg.xml
- Já especificado para usar o driver p6spy:
<property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property>
- Já ligou a propriedade Hibernate.show_sql:
<property name="hibernate.show_sql">true</property>
espião.propriedades
- Já mudou para usar meu driver JDBC de banco de dados real, filtro definido como false, incluindo categorias já definidas explicitamente para registrar qualquer coisa.
module.log=com.p6spy.engine.logging.P6LogFactory realdriver=oracle.jdbc.driver.OracleDriver filter=false dateformat=yyyy.MM.dd HH:mm:ss excludecategories= includecategories=error, info, batch, debug,statement,commit,rollback,result appender=com.p6spy.engine.logging.appender.StdoutLogger
Perdi alguma configuração importante ??
Solução 3
Finalmente, eu desisto P6Spy
pois é a biblioteca antiga cuja versão mais recente remonta a 2003.Eu recorro a usar outro código aberto gratuito semelhante chamado log4jdbc
para interceptar as instruções JDBC, consulte esse para mais informações se você estiver interessado.
Outras dicas
Nunca usei o P6Spy, mas você pode fazer com que as variáveis de ligação sejam enviadas para o seu log.Tente colocar isso em seu arquivo log4j.properties ou xml.
log4j.category.org.hibernate.type=DEBUG, CONSOLE
A causa comum para esse tipo de problema é que o driver JDBC é carregado antes do P6SpyDriver.Você pode contornar esse problema definindo deregisterdrivers=true em spy.properties.
BTW - Este problema foi corrigido na versão 2.0-alpha-1.