É possível gerar o SQL gerado usando o Eclipselink sem ter que aumentar a verbosidade do log?

StackOverflow https://stackoverflow.com/questions/2374395

  •  24-09-2019
  •  | 
  •  

Pergunta

Quero produzir o SQL gerado pelo Eclipselink para o console, durante o desenvolvimento. No entanto, eu só poderia fazê -lo usando o nível de log. Eu tenho um modelo de domínio complexo composto por muitas classes, tanto que a implantação leva um tempo considerável quando a verbosidade do log está no nível fino, uma vez que o Eclipselink produz sua análise de todo o modelo.

Existe uma maneira de obter o SQL sem recorrer ao nível de log bem (como o Hibernate faz)?

Foi útil?

Solução

Coloque as seguintes propriedades em seu persistence.xml:

 <property name="eclipselink.logging.level.sql" value="FINE"/>
 <property name="eclipselink.logging.parameters" value="true"/>

Este último é útil, para que os valores do parâmetro sejam mostrados.

Uma alternativa está usando log4jdbc ou log4jdbc-remix.

Outras dicas

A geração de log para eclipselink parece bastante difícil de definir, de acordo com este tópico.

Menciona um persistence.xml Arquivo com nível de log Você pode adaptar:

<property name="eclipselink.weaving" value="static" />
<property name="eclipselink.logging.level.sql" value="FINEST" />
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.level.cache" value="FINEST" />

Mas algumas outras configurações podem ser necessárias.

Como Martin documentos abaixo de, "Eclipselink/Exemplos/JPA/Logging"Documenta essas propriedades.

Para obter o SQL para uma consulta específica no tempo de execução, você pode usar a API do DatabaseQuery.

Query query = em.createNamedQuery("findMe"); 
Session session = em.unwrap(JpaEntityManager.class).getActiveSession(); 
DatabaseQuery databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery(); 
databaseQuery.prepareCall(session, new DatabaseRecord());

String sqlString = databaseQuery.getSQLString();

Este SQL conterá? para parâmetros. Para traduzir o SQL com os argumentos, você precisa de um banco de dados com os valores dos parâmetros.

DatabaseRecord recordWithValues= new DatabaseRecord();
recordWithValues.add(new DatabaseField("param1"), "someValue");

String sqlStringWithArgs = 
         databaseQuery.getTranslatedSQLString(session, recordWithValues);

Fonte: Como obter o SQL para uma consulta

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top