Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate中sql查询的等价物是什么_Java_Sql_Hibernate - Fatal编程技术网

Java hibernate中sql查询的等价物是什么

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

在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] 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有助于格式化