Когда мой код выдает вызов, как это:
entityManager.find(Customer.class, customerID);
Как я могу увидеть SQL-запрос для этого вызова? Предполагая, что у меня нет доступа к серверу базы данных для профилирования / мониторинга вызовов, есть ли способ регистрировать или просматривать в моей IDE соответствующие запросы SQL, выданные вызовами JPA? Я иду против SQL Server 2008 R2 с использованием драйвера jTDS.
Ответы:
Параметры ведения журнала зависят от поставщика. Вы должны знать, какую реализацию JPA вы используете.
Hibernate ( см. Здесь ):
EclipseLink ( см. Здесь ):
OpenJPA ( см. Здесь ):
DataNucleus ( см. Здесь ):
Установите категорию журнала
DataNucleus.Datastore.Native
на уровень, напримерDEBUG
.источник
Кроме того, если вы используете EclipseLink и хотите вывести значения параметров SQL, вы можете добавить это свойство в свой файл persistence.xml:
источник
Если вы используете hibernate и logback в качестве регистратора, вы можете использовать следующее (показывает только привязки, а не результаты):
org.hibernate.SQL = DEBUG печатает запрос
org.hibernate.type = TRACE печатает привязки и обычно результаты, которые будут подавлены через пользовательский фильтр
Вам нужна зависимость janino (http://logback.qos.ch/manual/filters.html#JaninoEventEvaluator):
источник
В EclipseLink для получения SQL для конкретного запроса во время выполнения вы можете использовать API DatabaseQuery:
Этот SQL будет содержать? для параметров. Для перевода SQL с аргументами вам необходим DatabaseRecord со значениями параметров.
Источник: Как получить SQL для запроса
источник
Чтобы просмотреть все SQL и параметры в OpenJPA, поместите эти два параметра в файл persistence.xml:
источник
Если вы хотите видеть точные запросы вместе со значениями параметров и возвращаемыми значениями, вы можете использовать прокси-драйвер jdbc. Он будет перехватывать все вызовы jdbc и записывать их значения. Некоторые прокси:
Они также могут предоставлять некоторые дополнительные функции, такие как измерение времени выполнения запросов и сбор статистики.
источник
Пример использования log4j ( src \ log4j.xml ):
источник
Я сделал шпаргалку, я думаю, что может быть полезным для других. Во всех примерах вы можете удалить это
format_sql
свойство, если хотите сохранить зарегистрированные запросы в одной строке (без красивой печати).Довольно распечатывать SQL-запросы без параметров подготовленных операторов и без оптимизации каркаса журналирования :
application.properties
файл:application.yml
файл:Довольно распечатать SQL-запросы с параметрами подготовленных операторов с использованием каркаса журналирования :
application.properties
файл:application.yml
файл:Довольно распечатать SQL-запросы без параметров подготовленных операторов с использованием каркаса журналирования :
application.properties
файл:application.yml
файл:Источник (и более подробная информация): https://www.baeldung.com/sql-logging-spring-boot
источник
Кроме того, если вы используете WildFly / JBoss, установите для уровня ведения журнала org.hibernate значение DEBUG.
источник
Еще один хороший вариант, если у вас слишком много журналов и вы хотите поместить их только как временные
System.out.println()
, вы можете, в зависимости от того, что делает ваш провайдер:источник
Если вы используете Spring Framework. Измените файл application.properties, как показано ниже
источник
См. Невозможно прекратить отображать SQL в спящем режиме с помощью Spring JPA Vendor Adapter.
источник
С помощью Spring Boot просто добавьте: spring.jpa.show-sql = true в application.properties. Это покажет запрос, но без фактических параметров (вы увидите? Вместо каждого параметра).
источник
Во время исследовательской разработки и для того, чтобы сфокусировать ведение журнала отладки SQL на конкретном методе, который я хочу проверить, я украсил этот метод следующими инструкциями logger:
источник
EclipseLink для вывода SQL (config persistence.xml):
источник
Там есть файл с именем persistence.xml. Нажмите Ctrl + Shift + R и найдите его, затем есть место, где написано что-то вроде showSQL.
Просто скажи это как правда
Я не уверен, должен ли сервер быть запущен в режиме отладки. Проверьте SQL, созданные на консоли.
источник