【发布时间】:2017-03-28 00:59:09
【问题描述】:
我创建了以下查询,该查询现在位于 Hibernate 使用的我的一个 java 类中。
private static final String COUNT_INTERQUARTILE_SQL
= " SET @number_of_rows \\:= (SELECT COUNT(*) FROM carecube.visit)" +
" SET @quartile \\:= (ROUND(@number_of_rows*0.25))" +
" SET @medianquartile \\:= (ROUND(@number_of_rows*0.50))" +
" SET @sql_q1 \\:= (CONCAT('(SELECT 'Q1' AS quartile, visit.id FROM carecube.visit order by visit.id LIMIT 1 OFFSET ', @quartile, ')'))" +
" SET @sql \\:= (CONCAT_WS(' UNION ', @sql_q1, @sql_med))" +
" PREPARE stmt1 from @sql;" +
" EXECUTE stmt1;";`
堆栈跟踪抱怨我设置 mysql 变量的每一行都有语法错误。显然它在 MySQL 中工作得很好。
我读到我可以在 Hibernate 中使用双反斜杠进行赋值。这是我第一次尝试在 Hibernate 中使用 MySQL 变量,所以不确定我是否遗漏了什么以及是否需要“准备”和“执行”?
有更多知识的人可以指出我哪里出错了吗?
另外,在我选择 Q1 的地方,我把它放在单引号中,在 MySQL 工作台中它是双引号。
编辑:我添加了双引号,因此 hibernate 不会对分配产生娘娘腔。我仍然不能为我的生活,弄清楚为什么我准备好之后不能只使用'@sql'。
编辑:我收到以下错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'PREPARE stmt1 from @sql_max; 附近使用的正确语法;在第 1 行执行 stmt1'
谢谢
【问题讨论】:
标签: java mysql sql sql-server hibernate