Как перехватить сгенерированный Hibernate SQL? - PullRequest
6 голосов
/ 04 августа 2010

Для системы безопасности, которая работает как старший брат (например, контролируемый обязательный контроль доступа), мы должны перехватывать и обрабатывать все операторы выбора, которые генерирует hibernate.Мы храним пользователя, отметку времени и выбор SQL в базе данных, чтобы включить некоторые профилирование с другими инструментами.Информация позволяет определить, на что пытался взглянуть пользователь.Для выбранных утверждений подготовленные свойства являются ценными.Нам нужен полный оператор SQL, включающий все параметры.

Есть ли какой-либо слушатель или перехватчик, где мы можем присоединиться и обработать все эти вещи?Самая большая нерешенная проблема на данный момент - это сбор параметров выписки.

Спасибо

Ответы [ 2 ]

3 голосов
/ 04 августа 2010

Фактические значения параметров становятся доступными (по крайней мере, насколько мне известно), когда для уровня ведения журнала пакета org.hibernate установлено значение DEBUG и установлено свойство hibernate.show_sql. Использование JDBCAppender, если вы хотите вывод логгера в самой базе данных.

В качестве альтернативы вы можете взглянуть на проект log4jdbc , который утверждает следующее:

В зарегистрированном выводе, для подготовленных заявления, обязательные аргументы автоматически вставляется в SQL выход. Это значительно улучшает удобочитаемость и отладка для многих случаи.

Если это не подходит, вы можете выяснить, можно ли использовать P6Spy в вашей ситуации . На WebLogic Server эквивалентная функциональность достигается с помощью WebLogic JDBC Spy , который поставляется с драйверами WebLogic JDBC для определенных баз данных. Оба они пишут в System.out, а не в базу данных (если я не ошибаюсь), так что это может быть не очень полезно.

3 голосов
/ 04 августа 2010

Вы можете использовать Interceptor.prepareSQL() (3.1+) для перехвата подготовленных операторов.

Я не думаю, что вы можете получить фактические параметры, не переходя на уровень абстракции. Возможное решение - использовать прокси-драйвер JDBC (см. P6Spy ).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...