当前位置: 首页 > 面试题库 >

如何在Hibernate中使用Mysql变量?

厉文栋
2023-03-14
问题内容

我需要在Hibernate中使用带有变量的本地SQL查询。

但是hibernate抛出错误信息:参数前缀后不允许有空格

因此,与:= mysql变量分配和hibernate变量分配存在冲突。

这是我的SQL查询:

SET @rank:=0; 
UPDATE Rank SET rank_Level=@rank:=@rank+1 ORDER BY Level;

hibernate代码(jpa语法):

Query query = em.createNativeQuery(theQuery);
query.executeUpdate();

我无法使用存储过程,因为我的SQL查询是动态生成的(“ Level”可以是“ int”或“ force” …)

我怎样才能做到这一点 ?

谢谢


问题答案:

好吧,我最终使用存储过程(是的,我最初不想要的)来创建动态查询(我认为不可能)。

这是我的代码:存储过程

DELIMITER |

DROP PROCEDURE IF EXISTS UpdateRank |

CREATE PROCEDURE UpdateRank(IN shortcut varchar(30))
BEGIN
    SET @rank=0;
    SET @query=CONCAT('UPDATE Rank SET ', shortcut, '=@rank:=@rank+1 ORDER BY ', shortcut);

    PREPARE q1 FROM @query;
    EXECUTE q1;
    DEALLOCATE PREPARE q1;
END;

|
DELIMITER ;

技巧是使用CONCAT函数在存储过程中动态创建查询。

然后,在经典的hibernate函数中调用该过程:

Query q = em.createNativeQuery("CALL updateRank('lvl')");
q.executeUpdate();


 类似资料:
  • 本文向大家介绍如何在MySQL LIKE子句中使用用户变量?,包括了如何在MySQL LIKE子句中使用用户变量?的使用技巧和注意事项,需要的朋友参考一下 使用该函数,我们可以在LIKE子句中使用用户变量。语法如下。 为了理解上述语法,让我们首先创建一个表。创建表的查询如下。 使用insert命令在表中插入记录。查询如下。 使用select语句显示表中的所有记录。查询如下 以下是输出。 这是在LI

  • 我想使用Hibernate(4.3.6 Final)持久化一个以基本类型为键、非实体可嵌入复合类型值为值的映射。 我没有任何问题的基本类型作为键和值,我做了所有的方式一样,这是好的。当我将map值更改为可嵌入复合类型时遇到了问题,如下所示。 但我得到了错误: 原因:com.mysql.jdbc.exceptions.jdbc4.mysqlSyntaxerrorexception:“field li

  • 问题内容: 嗨,我正在尝试将值插入到mysql表中。我正在尝试此代码。我已经为变量分配了值,我想将该变量传递给该插入语句。这样对吗? 这是我尝试过的,但是我无法插入值 问题答案: 试试这个,

  • 问题内容: 搜索了几个小时,但我陷入了使用JPA的PlayFramework学习的困境。我正在建立一个示例网站,可以在其中发布帖子。但是这些帖子可以具有以下状态: PostDraft(帖子是草稿,不发布) PostPublished(帖子可以发布) 这些状态存储在单独的表中。显然,州立草稿 尚不可见。 所以我有这些课: 页面类(从表中获取页面信息,一个页面可以有多个帖子) 帖子类(帖子可以在草稿中

  • 问题内容: 我创建了一个具有持久性上下文(hibernate为提供程序)的非常简单的应用程序,以从数据库中读取一些值。我在Maven中使用Eclipse。 首先,我得到 并根据此主题 http://openejb.979440.n4.nabble.com/problem-with-hibernate- persistence-provider- td980429.html 我排除了hibernat

  • 下面是我的hibernate配置类。 当我通过spring boot运行这个bean时,我得到的错误是“预期的单个匹配bean但找到了2:datasource和DataSourceActiviti”。