2014-12-12 3 views
1

Я использую Hibernate 4 и PostgresИспользуя CAST (ColumnName AS INT) в HQL

Следующий запрос является объединением двух таблиц, где я должен бросить столбец, который является VARCHAR в целое число для получения определенных значений в Последовательный порядок. Поддерживает ли HQL это? В документации сказано так, но я получаю исключение, как показано ниже

Query query = session.createQuery("SELECT DISTINCT a.attributeName, a.displayName, CAST(a.seqNo AS INTEGER) FROM Entitydefinitionconcrete a, Entitymasterconcrete b WHERE (a.entityTypeId=b.concreteEntityId AND b.baseType=:baseType) AND a.viewGrid=:flag ORDER BY CAST(a.seqNo AS INTEGER)"); 
query.setParameter("baseType","test"); 
query.setParameter("flag", true); 
query.list(); 

Exception:

HHH000203: processEqualityExpression() : No expression to process! 
org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '.' near line 1, column 70 [SELECT DISTINCT a.attributeName, a.displayName, CAST(a.seqNo AS Types.INTEGER) FROM com.tcs.oss.tims.common.entityBeans.Entitydefinitionconcrete a, com.tcs.oss.tims.common.entityBeans.Entitymasterconcrete b WHERE (a.entityTypeId=b.concreteEntityId AND b.baseType=:baseType) AND a.viewGrid=:flag ORDER BY CAST(a.seqNo AS INTEGER)] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:278) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182) 
+0

Попробуйте это : http://stackoverflow.com/questions/13627276/varchar-to-int-typecasting-in-jpa-1-9 Почему вы выполняете кастинг на уровне DTO? Вы также можете изменить методы getter & setter, чтобы выполнить соответствующее литье. –

+0

, поэтому этот CAST (.. AS ..) нельзя использовать в hql? – Develope001

ответ

2

DOC говорит,

cast(... as ...), where the second argument is the name of a Hibernate type, and 
extract(... from ...) if ANSI cast() and extract() is supported by the underlying database 

EG: литой (PROPNAME как целое число)

+0

Я сделал это только. – Develope001

Смежные вопросы