【问题标题】:Hibernate escaping ":" character休眠转义“:”字符
【发布时间】:2019-04-12 19:56:24
【问题描述】:

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

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

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;

我绝望了!

有什么想法吗?不胜感激!

谢谢!

【问题讨论】:

  • 你的查询背后的逻辑是什么?
  • 别想了,只是一个例子。这不是完整的查询,只有带有“:=”字符的代码。
  • 嗯,我正在考虑。特别是,我认为您应该避免在 Hibernate 中使用会话变量,也许我可以给您一个解决方法。
  • 好的,我将编辑查询并放入原始示例。

标签: mysql hibernate


【解决方案1】:

最后我可以在 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多