如何解决HQL concat函数
| 我带下划线的数据库是MS SQL Server。我通过Java休眠使用HQL查询。 如果我在concat中使用了replace函数,它将误解查询。 例如: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 Server使用\“ + \”运算符进行串联HQL,以非常荒谬的方式用con2替换concat函数。请提出一些解决方案。
解决方法
我认为您已经找到了http://opensource.atlassian.com/projects/hibernate/browse/HHH-4963的错误。如错误报告所示,您可以通过定义和使用自定义方言(通过将SQLServer2008Dialect子类化)并注册替换函数来解决此错误:
@Override
protected void registerFunctions() {
super.registerFunction();
registerFunction(\"replace\",new StandardSQLFunction(\"replace\",StandardBasicTypes.STRING));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。