#java #oracle #hibernate #plsql #persistence
#java #Oracle #гибернация #plsql #сохранение
Вопрос:
Я работаю с приложением, использующим Hibernate, подключенным к базе данных Oracle. Мне нужно выполнить вызов процедуры PL / SQL в начале каждой транзакции (чтобы активировать некоторые политики, которые зависят от того, кто открывает транзакцию).
Я думал сделать это с помощью перехватчика гибернации, но в afterTransactionBegin()
методе у меня нет доступа к соединению с БД, по которому я мог бы выполнить вызов своей процедуры.
На данный момент я использую перехватчик aop в методах getConnection (*) моей реализации источника данных, но это не совсем удовлетворительно, потому что эти методы вызываются в некоторые другие моменты (например, при создании моего EntityManagerFactory), когда у меня нет необходимой информации для вызова моей процедуры PL / SQL.
Знаете ли вы какой-либо механизм, позволяющий сделать что-то подобное?
Комментарии:
1. Почему вы не можете сделать то же самое, что вы делаете в AOP, в реальном бизнес-методе?
2. На самом деле я не думаю, что вы хотите вызывать функцию pl / sql для каждой транзакции. Вы хотите вызывать процедуру pl / sql только для каждого запроса клиента. Вам нужно учитывать, что вы можете вызывать другие процедуры pl / sql, которые могут фиксировать себя (даже несколько раз и каждый коммит (выдаваемый внутри pl / sql будет его собственной транзакцией).).