關於hibernate中使用case when 和函數,查詢解析配置的問題


最近老大給個任務,他在使用HQL語言進行數據查詢的時候使用了case when,運行之后並沒有執行,反而報錯,提示不識別case

 

於是交給我解決,查找資料顯示,hibernate有個查詢解析器,需要配置,各個版本提示如下:

Hibernate3.0 采用新的基於ANTLR的HQL/SQL查詢翻譯器,不過,Hibernate2.1的查詢翻譯器也依然存在。在Hibernate的配置文件中,hibernate.query.factory_class屬性用來選擇查詢翻譯器。例如:

(1)選擇Hibernate3.0的查詢翻譯器:

hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory

(2)選擇Hibernate2.1的查詢翻譯器

hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory

 

提示:ANTLR是用純Java語言編寫出來的一個編譯工具,它可生成Java語言或者是C++的詞法和語法分析器,並可產生語法分析樹並對該樹進行遍歷。ANTLR由於是純Java的,因此可以安裝在任意平台上,但是需要JDK的支持。

Hibernate開發小組盡力保證Hibernate3.0的查詢翻譯器能夠支持Hibernate2.1的所有查詢語句。不過,對於許多已經存在的應用,在升級過程中,也不妨仍然使用Hibernate2.1的查詢翻譯器。

值得注意的是, Hibernate3.0的查詢翻譯器存在一個Bug:不支持某些theta-style連結查詢方言:如Oracle8i的 OracleDialect方言、Sybase11Dialect。解決這一問題的辦法有兩種:(1)改為使用支持ANSI-style連結查詢的方言,如 Oracle9Dialect,(2)如果升級的時候遇到這一問題,那么還是改為使用Hibernate2.1的查詢翻譯器。

 

於是我在項目中加上了hibernate3.0的配置方式,但是這個時候問題來了,提示我找不到 org.hibernate.hql.ast.ASTQueryTranslatorFactory

於是各種百度,結果顯示需要使用antlr的jar包,但是項目中已經包含jar包,然后各種郁悶

仔細看過項目之后了解,這個項目用的是hibernate4版本以上,解析器配置采用的是默認的配置,可是還是解決不了

然后把我的hql語句 String hql = "from Event as e where case e.viewPermission when 1 then 1=1 when 0 then e.id in (select er.eventID as id from EventRecord as er where er.openID = 1) else 1=1 end"; 中的case  when 放到了from 前面 結果可以執行,不報錯

最后了解  hql支持簡單的case  when 。。。。

然后郁悶透頂,最近在hql語言中使用時間函數,也是不支持。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM