首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在带有注解的Java、Spring MVC、Hibernate web应用程序中设置MySQL用户变量的最佳方式是什么?

在带有注解的Java、Spring MVC、Hibernate web应用程序中设置MySQL用户变量的最佳方式是什么?
EN

Stack Overflow用户
提问于 2010-10-07 06:36:13
回答 1查看 2.3K关注 0票数 1

我需要能够设置在Spring MVC Hibernate web ap中的触发器中使用的MySQL用户变量。此用户变量用于Hibernate正在操作的表的MySQL触发器中。我需要在Hibernate对数据库的所有写访问期间正确设置这个用户变量。

不幸的是,HQL没有用于设置MySQL用户变量的技术,而且我找到的用于直接执行MySQL的方法似乎不适用于事务。由于user变量的生命周期是数据库连接的生命周期,因此我需要使用与执行MySQL相同的连接来执行HQL。但是,我的事务似乎是在执行本机MySQL之后运行HQL的,因此MySQL触发器不存在预期的用户变量。

要执行我一直在使用的原生MySQL查询:

代码语言:javascript
运行
复制
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触发器中断。我通过在没有触发器的情况下进行测试来验证这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-08 23:48:15

我发现这个问题和我的非常相似:How to use Mysql variables with Hibernate?

因此,我按照建议使用了一个存储过程和实体管理器上的executeNativeQuery方法来调用它。

下面是我的存储过程代码:

代码语言:javascript
运行
复制
DROP PROCEDURE IF EXISTS set_current_user
CREATE PROCEDURE set_current_user(IN user_id BIGINT)
BEGIN
  SET @current_user_id = user_id
END

我用以下方式调用它:

代码语言:javascript
运行
复制
Query q = em.createNativeQuery("CALL set_current_user("+userId+")");
        q.executeUpdate();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3877423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档