Вызвать собственное заявление о получении соединения в диспетчере сущностей - PullRequest
0 голосов
/ 10 июня 2011

Моя компания использует триггеры ONINSERT, ONUPDATE, ONDELETE базы данных для регистрации изменений, а также есть способ выдать себя за другого пользователя базы данных, вызвав хранимую процедуру, которая устанавливает параметр сеанса базы данных.Затем любые изменения, сделанные с этим соединением, автоматически назначаются этому пользователю.Я знаю, что это плохой дизайн, но я не могу это изменить.

Теперь мне нужно убедиться, что эта хранимая процедура всегда вызывается, прежде чем менеджер сущностей синхронизирует изменения с базой данных, и пользователь для олицетворения меняется каждый раз.Я попытался просто сделать это, просто заключив вызов хранимой процедуры в EJB без состояния и вызвав этот EJB, прежде чем вносить какие-либо изменения в сущности, но в некоторых случаях это не работает - он действует так, как процедура никогда не вызывалась.Я предполагаю, что процедура была вызвана в другом соединении, чем сами изменения были опубликованы, хотя это должно было произойти в одной транзакции.

Есть ли какой-нибудь чистый способ сделать это?

1 Ответ

0 голосов
/ 10 июня 2011

Вы можете использовать EntityListeners.Они должны быть включены во все ваши сущности, поэтому, если у вас их много, возможно, это не очень хорошее решение.

В противном случае вам может понадобиться способ, специфичный для реализации:

...