2010-11-23 6 views
2

Я использую библиотеки EclipseLink в eclipse (в разное время) и развертываю на TopLink, мне нужно показать сгенерированный оператор sql.Показывать сгенерированный SQL в toplink в eclipse

Я использую следующий persistence.xml:

<?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> 

Я знаю, что это должно показать генерируемый SQL заявления, но это не так.

ответ

2

Чтобы увидеть SQL для JPA Query вы можете включить ведение журнала на FINE или ниже.

Чтобы получить SQL для определенного запроса во время выполнения, вы можете использовать API DatabaseQuery.

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

Этот SQL будет содержать? для параметров. Чтобы получить SQL-перевод с аргументами, вам понадобится DatabaseRecord со значениями параметров.

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

Источник: How to get the SQL for a Query