【发布时间】:2011-04-22 02:27:45
【问题描述】:
我需要能够设置一个 MySQL 用户变量,该变量在 Spring MVC Hibernate Web 应用程序的触发器中使用。这个用户变量在被 Hibernate 操作的表上的 MySQL 触发器中使用。我需要在 Hibernate 对数据库的所有写访问期间正确设置此用户变量。
不幸的是,HQL 没有设置 MySQL 用户变量的技术,而且我找到的直接执行 MySQL 的方法似乎不适用于事务。由于用户变量的生命周期是数据库连接的生命周期,因此我需要 MySQL 使用与执行 HQL 相同的连接来执行。但是,在执行本机 MySQL 之后,我的事务似乎运行 HQL,因此 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 触发器中断。我通过在不存在触发器的情况下进行测试来验证这一点。
【问题讨论】:
标签: java mysql hibernate web-applications spring-mvc