Захватить окончательный SQL-запрос, сгенерированный hibernate JPA в JBoss AS 7
Я очень старался собрать точный SQL действительно сложного запроса JPA в моем проекте с целью оптимизации, но пока я не могу это сделать. Я пробовал следующие способы:
1) Попробовал включить журналы гибернации через logback, поместив в мой logback.xml следующий файл и включив show_SQL
<logger name="org.hibernate.type" level="ALL" />
<logger name="org.hibernate" level="TRACE">
<appender-ref ref="fdpAdminAppender" />
</logger>
2) Пробовал использовать драйверы P6spy-2 с Jboss AS7 и postgres, но просто не мог заставить его работать. Это дает следующее исключение.
com.p6spy.engine.spy.P6SpyDriver cannot be cast to javax.sql.XADataSource
3) Включил встроенный шпион Datasource в JBoss AS 7 и все заработало. Но журналы показывают слишком много данных, которые для меня бесполезны, так как они снова добавляют значения как "?". Даже если я смогу получить здесь полный оператор SQL, моя проблема будет решена.
До сих пор я преуспел только с шагом 3, но либо я что-то упускаю, либо это работает, либо случай, когда моя настоящая цель не решена. Поэтому, пожалуйста, кто-нибудь, помогите мне получить фактический запрос SQL от JPA. Меня не волнует, как я это получу, мне просто нужно это получить. Я столкнулся с необходимостью проверять фактический SQL, сгенерированный JPA, со значениями так много раз во время разработки. Странно, почему не существует стандартного способа сделать это.
1 ответ
Просто добавьте следующее в файл persistence.xml:
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
Не забудьте положить его внутрь <properties>
тег, вот так:
<persistence>
<persistence-unit>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Удачи:)