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