1
我加下劃線的數據庫是MS SQL服務器。我通過java hibernate使用HQL查詢。 如果我在concat中使用replace函數,它會錯誤地解釋查詢。 例如:HQL concat函數
HQL Query : from Project where replace('\\\\yyy\\\\','\\\\','\\\\\\\\') like concat(replace(projectPathPrefix,'\\\\','\\\\\\\\\\\\\\\\')),'%') and sourceControlSystems=3
SQL interpretation : select * from PRJ_project project where (replace('\\ooo\\', '\\', '\\\\') like replace(project0_.project_path_prefix+'\\'+'\\\\\\\\')+'%' and source_control_system_id=3
它還轉換逗號作爲外括號包含concat函數替換功能到+
的,
。如果不需要的數據庫是MySQL或Oracle,這兩者都使用concat函數,這可以正常工作。但是,由於SQL服務器使用「+」運算符進行連接,HQL以非常荒謬的方式用+
代替連接函數。請爲此提出一些解決方案。
難道你有你的HQL查詢太多右括號?我認爲'concat(替換(projectPathPrefix,'\\','\\\\\\\')),'%')'應該是concat(replace(projectPathPrefix,'\\','\\\ '','%')' – 2011-05-25 10:10:44
是的,已經過修正並嘗試過。但仍然是同樣的問題。它錯誤地解釋。有沒有其他的選擇連接,然後concate()在休眠,它與MS SQL服務器,甲骨文以及MySQL一起工作? – 2011-05-25 11:28:30