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

时间:2014-04-10 18:19:55

标签: 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: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]

2 个答案:

答案 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")

希望这有帮助。