在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)) asc]
答案 0 :(得分:1)
其中一些不在hibernate方言中,您可以使用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()
,但我认为它不支持正则表达式。
答案 1 :(得分:0)
我很确定你也可以在hibernate中使用SQL查询。创建休眠会话时,可以使用
之类的东西session.createSQLQuery("Your Query Here")
希望这有帮助。