GORM (Hibernate) Перехватчик для запуска определенного SQL, прежде чем Hibernate запускает его в БД в приложении Grails? - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть приложение Grails, в котором я использую GORM.Это прекрасно работает.Однако у меня есть требование, чтобы перед вызовом SQL в базе данных он выполнял определенную хранимую процедуру.Итак, есть ли способ, которым я могу сделать что-то, что вызовет мой метод, который запускает хранимую процедуру, прежде чем Hibernate запускает SQL для выбора, вставки, обновления, удаления и т. Д. Ваш ответ будет высоко оценен.PS- Причина, по которой мне нужно запустить определенную хранимую процедуру, заключается в изменении Oracle Workspace)

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Может быть несколько вариантов.

Вы можете использовать оболочку dataSource, которая расширяет org.springframework.jdbc.datasource.DelegatingDataSource и запускает инструкцию всякий раз, когда вызывается getConnection. Я предполагаю, что можно вызывать оператор (сохраненный процесс) только один раз за транзакцию, поэтому DelegatingDataSource, вероятно, является наиболее подходящим решением.

Вы также можете использовать плагин http://www.grails.org/plugin/jdbc-pool (обертывает пул JDBC Tomcat) и попытаться подключиться к реализации пула источников данных. Tomcat JDBC Pool поддерживает перехватчики.

Также возможно изменить SQL, отправленный GORM / Hibernate, используя перехватчик Hibernate, если это помогает: Можно ли динамически отображать имя таблицы для объекта домена в граалях? .

0 голосов
/ 12 апреля 2011

Не ясно, хотите ли вы запустить этот хранимый процесс один раз перед выполнением любого SQL или перед выполнением каждого оператора SQL.Вот предложение для обоих случаев:

Once Only

Вызов метода, который вызывает сохраненный процесс в Bootrap.init()

Before Every

Вызов методаот до * обработчиков событий GORM

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