JPA - Query

11 respostas
E

Estou usando JPA, e preciso pegar as querys de Insert/Update/Delete antes de serem executadas no banco de dados?

Alguém sabe como faço isso?

11 Respostas

vinicius.martinez

Procure por callbacks:

http://ericogr.wordpress.com/2008/04/28/usando-callback-listeners-jpa/

Scoobydoo

Cria um PreparedStatement();

E

São muitas tabelas, não vai dar pra fazer isso para cada uma. Por isso estou procurando uma forma de pegar o comando sql criado pelo jpa antes de executar no banco de dados.

B

São muitas tabelas, não vai dar pra fazer isso para cada uma. Por isso estou procurando uma forma de pegar o comando sql criado pelo jpa antes de executar no banco de dados.

O que você quer fazer com estes sqls ?

E

São muitas tabelas, não vai dar pra fazer isso para cada uma. Por isso estou procurando uma forma de pegar o comando sql criado pelo jpa antes de executar no banco de dados.

O que você quer fazer com estes sqls ?

1- Auditoria.
2- As querys geradas serão utilizadas para fazer um sync com outros bancos de dados.

B

São muitas tabelas, não vai dar pra fazer isso para cada uma. Por isso estou procurando uma forma de pegar o comando sql criado pelo jpa antes de executar no banco de dados.

O que você quer fazer com estes sqls ?

1- Auditoria.
2- As querys geradas serão utilizadas para fazer um sync com outros bancos de dados.

Bom vc pode fazer de muitas formas, vou sugerir estas:

1 - Vc poderia colocar um show sql com o valor true no persistence.xml
2 - Já é um pouquinho mais complicado de fazer em runtime, mas como falado pelo Vinicius vc pode começar estudando os callbacks em entidades ou listeners para ver se irá te atender…

E

O único problema do callback é que eu não tenho exatamente a query que foi executada, e sim o objeto. Mas se não tiver forma de pegar a query em runtime vou ter que partir para esse lado mesmo.

Lavieri

se estiver usando Hibernate, cria um interceptor, e coloca ele nos metodos add, remove, update…

e ai trata o evento…

E

Lavieri:
se estiver usando Hibernate, cria um interceptor, e coloca ele nos metodos add, remove, update…

e ai trata o evento…

Essa foi quase. Com interceptor que consigo pegar a query que vai ser executada no método “onPrepareStatement” porém a query vem assim:

INSERT INTO TableA(Col1,Col2,Col3) VALUES(?,?,?)

eu eu precisava da query assim:

INSERT INTO TableA(Col1,Col2,Col3) VALUES(“Value1”,“Value2”,“Value3”)

E

please… eu ainda não consegui resolver este problema.

A

Estou tentando pegar o SQL completo também. Caso tenha conseguido favor postar. Até mais!

Criado 15 de março de 2010
Ultima resposta 3 de mai. de 2011
Respostas 11
Participantes 6