Java hibernate中sql查询的等价物是什么
在SQL Server中,我使用此查询Java hibernate中sql查询的等价物是什么,java,sql,hibernate,Java,Sql,Hibernate,在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:unex
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]
java.lang.IllegalArgumentException:org.hibernate.hql.ast.QuerySyntaxException:意外标记:左侧靠近第1行第122列
[从models.entities.UnitEntity c中选择c,其中c.expSetId=:expSetId和isWaitArea=:isWaitArea按转换顺序排列(INT,LEFT(name,PATINDEX('%[^0-9]',name+'z')-1))asc]
其中一些不是hibernate方言,您可以使用
子字符串更改左侧,使用转换。至于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()
,但我认为它不支持正则表达式。我很确定您也可以将SQL查询与hibernate一起使用。创建hibernate会话时,可以使用
session.createSQLQuery("Your Query Here")
希望这有帮助。thx有助于格式化