`

关于hql中使用本地sql函数的问题(问-答)

阅读更多

转自于:http://www.iteye.com/problems/23775

问:

我在开发过程中,使用hql进行查询(mysql5)使用到了mysql自带的函数find_in_set()这个函数作为匹配字符串的来讲效率非常好,但是我直接把它写在hql语句里面(from ForumMemberInfo fm,ForumArea fa where find_in_set(fm.userId,fa.managerIds) )中,ForumArea讨论区中有一个字段存的是版主的ID(id,id,id)然后我想把所有的版主ForumMemberInfo的信息都取出来,但是报错了javax.servlet.ServletException: org.springframework.orm.hibernate3.HibernateQueryException: unexpected AST node 
我查了关于mysql方言的设置,在MySQLDialect这个类里面没有找到方法让MySQLDialect支持mysql本身的函数,但是我很奇怪的是,像now()这一类的函数却可以用,我搜索了一些资料,没有找到合适的答案,所以提问,有没有办法设置MySQLDialect让他支持在hql中使用mysql本身的函数,如果不行那也就只能用本地sql执行了,当然功能实现没有问题,我只是想找一个更好的办法,请教大家了!

 

答:

楼主,这个应该来说是是做不到的。 

原因: 
HQL是Hibernate的一套语法和标准,你写的查询语句必须符合它的要求,而对于MySQLDialect只是充当了HQL到MySQL的一个翻译官而已,它只能将HQL语句翻译成MySQL语句,是单向的,不能把MYSQL翻译成HQL,明白了吧。所以对于MYSQL中的一些函数,它是不认识的。除非是各种数据库中通用的函数。 


HQL之所以能够用在大部分数据库上,就在于它是各种数据库语句的子集,应该来说是是各种数据库通用的语句,只不过在执行的时候,需要相应数据库的翻译官,就是Dialect,翻译成相应数据支持的语句。 


试想,如果HQL要是能用各种数据库中的函数,那岂不是太难制定统一的标准了吗?并且使用起来也是非常困难的。

分享到:
评论

相关推荐

    hql开窗函数.sql

    hql开窗函数.sql

    HQL常用函数大全.docx

    适合大数据初学者,数据分析行业工作者登需要使用hive SQL的人使用

    hibernateのHQL

    2、HQL最终也会生成SQL,也就是说 HQL使用范围是<SQL的范围 3、HQL是由query对象获得。 hql sql 面向对象 面向结构(表) 操作的是实体类 ,类属性 表,表列段 命名参数占位 占位符 使用hql的几种返回...

    HQL:Hibernate Qusery Language

    HQL :是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。 查询设定各种查询条件。 支持投影查询,检索出对象的部分属性。 支持分页查询,允许使用having和group by 提供内制的聚集函数,sum(),min(),max...

    Spring的JDBCTemplate

    当hql等查询方式不能满足性能或灵活性的要求,必须使用SQL时,大家有三种选择: 第一、使用Hibernate 的sql 查询函数,将查询结果对象转为Entity对象。 第二、使用Hibernate Session的getConnection 获得JDBC ...

    jdbc基础和参考

    CallableStatement:主要用来执行pl/sql的一些过程,函数等。 1.写一条恒成立的select语句,无论你输入的条件是什么,总是能讲表中的所有数据输出 select id,last_name from s_emp where '1' ='1'; where 1=1; ...

    支持多数据库的ORM框架ef-orm.zip

    对于各种常用SQL函数和运算符,都可以自动转换为当前数据库支持的方言来操作。其函数支持也要多于HQL支持的函数。 阅读推荐:第7、8章 特点三,可能是业界最快的ORM框架. 得益于ASM的动态代码生成技术,部分耗时...

    sql server查询时间技巧分享

    代码如下: convert(varchar,字段名,120)——–yyyy-mm-ddhh:ss:mm0000 convert(char(10),字段名,120)——yyyy-mm-dd 2、如果使用的是sql编辑器(微软自带的工具),查询日期不需要使用函数转换,例如 Sql代码 代码...

    【63课时完整版】大数据实践HIVE详解及实战

    22.Hive中使用自定义UDF实现日期格式转换 23. HiveServer2的介绍及三种连接方式 24.Hive元数据、fetch task和严格模式的介绍 第3章:Sqoop Sqoop及用户行为分析案例 25.CDH版本框架的介绍 26. CDH版本框架的环境...

    hive常用的开发规范

    hive常用的开发规范 hdfs hbase udf函数 hql shell脚本开发等常用规范,仅供参考

    Hive函数大全.txt

    Hive常用SQL函数大全,有示例。

    大数据运维技术第6章 Hive组件安装配置课件.pptx

    Hive相关知识; Hive是基于Hadoop的数据仓库工具,可以用来对HDFS中存储的数据...Hive还允许用户编写自己定义的函数UDF,用来在查询中使用。;;;6.2 Hive组件架构;6.2 Hive组件架构;6.2 Hive组件架构;;6.3 下载和解压安装

    Hadoop各组件详解(Hive篇)

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL); 其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,hive可以理解为一个将...

    hibernate3.2中文文档(chm格式)

    5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary ...

    NHibernate中文帮组文档(2008.11月更新)

    5.3. SQL中引号包围的标识符 5.4. 模块化映射文件 5.5. 数据库生成属性(Generated Properties) 5.6. 数据库辅助对象 6. 集合类(Collections)映射 6.1. 持久化集合类 6.2. 集合外键(Collection foreign keys) 6.3. ...

    HibernateAPI中文版.chm

    5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary ...

    Hibernate实战(第2版 中文高清版)

     1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不匹配   1.2.1 粒度问题   1.2.2 子类型问题   1.2.3 同一性问题   1.2.4 与关联相关的问题   1.2.5 数据导航的问题   ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    5.4. SQL中引号包围的标识符 5.5. 其他元数据(Metadata) 5.5.1. 使用 XDoclet 标记 5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary ...

    java从入门到精通70个PPT

    12 javascript内置对象和内置函数 13 javascript的DOM编程 14-15项目案例:当当网上书店或者做一个计算器 16 Ajax 原理 17 Ajax框架 18 在线培训:JQuery 19 Jsp与动态网站初体验 20 状态管理 21 JSTL和EL 22 JSP...

Global site tag (gtag.js) - Google Analytics