我真的需要這方面的幫助。如何在HQL中使用sql case子句?
這裏是代碼片段:
hSql=" select case
when min(start_day_plan) is not NULL then min(start_day_plan)
else to_date((min(insertDate)) - cast('1 month' as interval),'yyyy-MM-dd')
end
from Project"
getHibernateTemplate().find(hSql);
但是,這產生以下錯誤:
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.CaseNode
\-[CASE] CaseNode: 'case'
+-[WHEN] SqlNode: 'when'
| +-[IS_NOT_NULL] UnaryLogicOperatorNode: 'is not null'
| | \-[AGGREGATE] AggregateNode: 'min'
| | \-[IDENT] IdentNode: 'start_day_plan' {originalText=start_day_plan}
| \-[AGGREGATE] AggregateNode: 'min'
| \-[IDENT] IdentNode: 'start_day_plan' {originalText=start_day_plan}
\-[ELSE] SqlNode: 'else'
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'to_date' {originalText=to_date}
\-[EXPR_LIST] SqlNode: 'exprList'
+-[MINUS] BinaryArithmeticOperatorNode: '-' {[email protected]}
| +-[AGGREGATE] AggregateNode: 'min'
| | \-[IDENT] IdentNode: 'insertDate' {originalText=insertDate}
| \-[METHOD_CALL] MethodNode: '('
| +-[METHOD_NAME] IdentNode: 'cast' {originalText=cast}
| \-[EXPR_LIST] SqlNode: 'exprList'
| +-[QUOTED_STRING] LiteralNode: ''1 month''
| \-[IDENT] IdentNode: 'interval' {originalText=interval}
\-[QUOTED_STRING] LiteralNode: ''yyyy-MM-dd''
什麼將是這個正確的查詢?即時通訊只是試圖從insertdate減去1個月。
如果你能幫忙,請不要so..thanks :)
ooppss ...我只是忘了將它粘貼在這裏... :) – 2009-10-01 08:53:36
我需要導入類爲這種情況或案件是不支持在hql中? – 2009-10-01 09:33:30
** case **在hql中完全支持(如果底層數據庫支持它)。 – KLE 2009-10-01 09:41:07