Мне нужно иметь возможность установить пользовательскую переменную MySQL, которая используется в триггере в веб-приложении Spring MVC Hibernate. Эта переменная пользователя используется в триггерах MySQL для таблиц, которыми манипулирует Hibernate. Мне нужно, чтобы эта пользовательская переменная была правильно установлена во время всех обращений Hibernate к базе данных.
К сожалению, в HQL нет метода установки пользовательских переменных MySQL, и метод, который я нашел для непосредственного выполнения MySQL, похоже, не работает с транзакцией. Поскольку срок жизни пользовательской переменной - это время соединения с базой данных, мне нужно, чтобы MySQL выполнялся с использованием того же соединения, с которым будет выполняться их HQL. Однако мои транзакции, похоже, запускают HQL после того, как собственный MySQL был выполнен, и, следовательно, ожидаемая пользовательская переменная отсутствует для триггера MySQL.
Для выполнения собственных запросов MySQL я использовал:
HibernateEntityManager em=(HibernateEntityManager) getEntityManager();
Connection connection=em.getSession().connection();
Statement s = connection.createStatement();
s.executeUpdate("SET @current_user_id="+userId);
Когда Spring MVC фиксирует мою транзакцию, он выполняет запросы HQL, а затем выдает исключение, потому что @current_user_id вызывает сбой триггера MySQL. Я подтвердил это путем тестирования без присутствия триггеров.