#jpa #jakarta-ee #glassfish
#jpa #джакарта-ee #glassfish
Вопрос:
Моя компания использует триггеры database ONINSERT, ONUPDATE, ONDELETE для регистрации изменений, а также существует способ выдавать себя за другого пользователя базы данных, вызывая хранимую процедуру, которая задает параметр сеанса базы данных. Затем все изменения, внесенные с помощью этого соединения, автоматически присваиваются этому пользователю. Я знаю, что это плохой дизайн, но я не могу это изменить.
Теперь мне нужно убедиться, что эта хранимая процедура всегда вызывается до того, как entity manager синхронизирует изменения с базой данных, и пользователь, которого нужно олицетворять, каждый раз отличается. Я попытался просто сделать это, просто обернув вызов хранимой процедуры в EJB без состояния и вызвав этот EJB, прежде чем вносить какие-либо изменения в объекты, но в некоторых случаях это не работает — это действует так, как будто процедура никогда не вызывалась. Я предполагаю, что процедура была вызвана в другом соединении, чем были опубликованы сами изменения, хотя это должно было произойти в одной транзакции.
Есть ли какой-нибудь чистый способ сделать это?
Ответ №1:
Вы могли бы использовать EntityListeners. Они должны быть размещены на всех ваших объектах, поэтому, если у вас их много, возможно, это не очень хорошее решение.
В противном случае вам может потребоваться способ, специфичный для реализации:
-
Верхняя ссылка:http://java-persistence.blogspot.com/2007/04/simple-auditing-using-toplink-jpa.html
-
Переход в спящий режим:http://community.jboss.org/wiki/AuditLogging
-
EclipseLink:http://www.eclipse.org/forums/index.php?t=treeamp;th=165280amp;#page_top