Захватить окончательный 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>

Удачи:)

Другие вопросы по тегам