Подтвердить что ты не робот

Можно ли выводить сгенерированный SQL с помощью EclipseLink без необходимости увеличивать объем логов?

Я хочу вывести SQL, сгенерированный EclipseLink, на консоль во время разработки. Тем не менее, я мог сделать это только с использованием уровня регистрации FINE. У меня сложная модель домена, состоящая из многих классов, настолько, что для развертывания требуется значительное количество времени, когда многословие журнала находится на уровне FINE, так как EclipseLink выводит свой анализ всей модели.

Есть ли способ получить SQL, не прибегая к уровню журнала FINE (например, Hibernate)?

4b9b3361

Ответ 1

Добавьте в свой persistence.xml следующие свойства:

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

Последнее полезно, так что показаны значения параметра.

Альтернативой является log4jdbc или log4jdbc-remix.

Ответ 2

Генерация журнала для EclipseLink кажется довольно сложной в соответствии с этот поток.

В нем упоминается файл persistence.xml с уровнем журнала, который вы можете адаптировать:

<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" />

Но могут потребоваться некоторые другие настройки.

Как Martin документы ниже, " EclipseLink/Examples/JPA/Logging" документирует эти свойства.

Ответ 3

Чтобы получить SQL для определенного запроса во время выполнения, вы можете использовать API 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();

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

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

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

Источник: Как получить SQL для запроса