Вызов собственной инструкции при получении соединения в entity manager

#jpa #jakarta-ee #glassfish

#jpa #джакарта-ee #glassfish

Вопрос:

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

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

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

Ответ №1:

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

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