2010-11-23 41 views
2

J'utilise des bibliothèques EclipseLink en eclipse (en temps de dev) et je les déploie sur TopLink, j'ai besoin d'afficher l'instruction sql générée.Afficher SQL généré dans toplink en eclipse

J'utilise le persistence.xml suivant:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="myPUnit" transaction-type="JTA"> 
     <provider> 
      oracle.toplink.essentials.PersistenceProvider 
     </provider> 
     <jta-data-source>jdbc/dcds</jta-data-source> 
     <properties> 
      <property name="toplink.cache.shared.default" value="false"/> 
      <property name="toplink.logging.level" value="FINE" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Je sais que ce doit montrer généré des instructions SQL, mais ce n'est pas le cas.

Répondre

2

voir le SQL pour une requête JPA, vous pouvez activer la journalisation sur FINE ou plus bas.

Pour obtenir le code SQL d'une requête spécifique lors de l'exécution, vous pouvez utiliser l'API DatabaseQuery.

Session session = em.unwrap(JpaEntityManager).getActiveSession(); 
DatabaseQuery databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery(); 
databaseQuery.prepareCall(session, new DatabaseRecord()); 
String sqlString = databaseQuery.getSQLString(); 

Ce SQL contiendra? pour les paramètres. Pour obtenir le SQL traduit avec les arguments, vous avez besoin d'un DatabaseRecord avec les valeurs des paramètres.

Session session = em.unwrap(JpaEntityManager).getActiveSession(); 
DatabaseQuery databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery(); 
String sqlString = databaseQuery.getTranslatedSQLString(session, recordWithValues); 

Source: How to get the SQL for a Query