休眠转义“:”字符

时间:2018-11-09 08:51:30

标签: mysql hibernate

我在这里找到了一些帖子和一些答案。我已经尝试了每个结果都不好的方法。我不想使用存储过程。

我正在Java和MySQL中使用Hibernate。我的一些查询字符串是:

SET @rank = 0; 
SET @limit = 0.1; 
SELECT (@limit := ROUND(COUNT(id) * @limit)) FROM Pics;
SELECT Q1.popularity FROM Pics AS p INNER JOIN (
   SELECT IF((@rank := @rank + 1) <= @limit, true, false) AS 'popularity', p.id 
   FROM Pics AS p 
   ORDER BY p.points DESC
) AS Q1 ON Q1.id = p.id WHERE p.id = 7;

有人说一个解决方案正在查询(post)中使用/*'*/:=/*'*/,但对我而言不起作用:

SET @rank = 0; 
SET @limit = 0.1; 
SELECT (@limit /*'*/:=/*'*/ ROUND(COUNT(id) * @limit)) FROM Pics;
SELECT Q1.popularity FROM Pics AS p INNER JOIN (
   SELECT IF((@rank /*'*/:=/*'*/ @rank + 1) <= @limit, true, false) AS 'popularity', p.id 
   FROM Pics AS p 
   ORDER BY p.points DESC
) AS Q1 ON Q1.id = p.id WHERE p.id = 7;

我很沮丧!

有什么想法吗?我会很感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

最后,我可以在Java查询代码中使用双反斜杠来修复它:

SET @rank = 0; 
SET @limit = 0.1; 
SELECT (@limit \\:= ROUND(COUNT(id) * @limit)) FROM Pics;
SELECT Q1.popularity FROM Pics AS p INNER JOIN (
   SELECT IF((@rank \\:= @rank + 1) <= @limit, true, false) AS 'popularity', p.id 
   FROM Pics AS p 
   ORDER BY p.points DESC
) AS Q1 ON Q1.id = p.id WHERE p.id = 7;