【问题标题】:what is the equelent of sql query in hibernate什么是hibernate中的sql查询等价物
【发布时间】:2014-04-11 22:10:29
【问题描述】:

在 SQL Server 中我使用这个查询

select * 
from Unit c 
ORDER BY CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name + 'z')-1)) desc;

我希望在 Hibernate 中使用此查询。当我在 Hibernate 中使用它时出现错误

java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException:unexpected token: LEFT near line 1, column 122 [SELECT c FROM models.entities.UnitEntity c WHERE c.expSetId = :expSetId AND isWaitArea=:isWaitArea ORDER BY CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name + 'z' )-1)) 升序]

【问题讨论】:

  • 感谢帮助格式化

标签: java sql hibernate


【解决方案1】:

其中一些不在休眠方言中,您可以将left 更改为substring,将convert 更改为cast。至于patindex,我找不到替代品。您可以将 pathindex 添加到您使用的方言的构造函数中

registerFunction( "patindex", new StandardSQLFunction("patindex") );

或为存储过程创建 patindex()。

那么你可以使用这样的东西:

from Unit c order by cast(substring(name, 0, PATINDEX('%[^0-9]%', name + 'z')-1) as integer);

或者你可以使用locate()而不是patindex(),但我认为它不支持正则表达式。

【讨论】:

    【解决方案2】:

    我很确定您也可以将 SQL 查询与 hibernate 一起使用。当你创建你的休眠会话时,你可以使用类似

    session.createSQLQuery("Your Query Here")
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-10-29
      • 2013-04-14
      • 2011-11-06
      • 2014-08-08
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2021-08-04
      • 2018-12-17
      相关资源
      最近更新 更多