`

关于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与SQL的区别

    在IT领域,特别是数据库操作和查询语言中,HQL(Hibernate Query Language)与SQL(Structured Query Language)是两个重要的概念,它们各自拥有独特的特性和应用场景。本文将深入探讨HQL与SQL之间的区别,帮助读者...

    HQL常用函数大全.docx

    在Hive SQL (HQL) 中,关系运算是处理数据查询的基础。以下列出的关系运算符帮助用户进行数据比对。 ##### 1. 等值比较 (`=`) **语法**:`A = B` **操作类型**:所有基本类型 **描述**:此操作符用于比较两个...

    Hadoop-2.8.0-Day08-Hive函数与HQL详解-课件与资料.zip

    在这个"Day08-Hive函数与HQL详解"的课程资料中,我们将深入探讨Hive的函数使用以及HQL的相关知识。 Hive的核心功能在于其强大的SQL接口,即HiveQL,它允许用户以结构化查询的方式操作存储在Hadoop HDFS中的非结构化...

    hibernate 调用oracle函数

    4. **定义Hibernate Native SQL查询**:由于Hibernate默认不支持调用存储过程或函数,我们需要使用`@NamedNativeQuery`或`@SqlResultSetMapping`注解来定义一个原生SQL查询,用于调用Oracle函数。例如: ```java @...

    03-HQL实用技术.pdf

    - 在实体类中使用`@ManyToMany`注解来定义这种关系。 #### 二、HQL查询技术 **2.1 为什么使用HQL查询** - **面向对象**: HQL采用面向对象的语法结构,更加直观易懂。 - **避免SQL注入**: 使用HQL可以减少SQL注入...

    HQL常用函数

    在本文中,我们将详细介绍HQL中的一些常用函数及其用法。 #### 数学函数 1. **ABS(column_name)**:此函数用于获取指定列值的绝对值。例如,`ABS(-5)`将返回`5`。 2. **SQRT(column_name)**:此函数用于计算指定...

    hql语句 使用大全

    ### HQL语句使用大全 HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了灵活而强大的数据检索方式,使开发人员能够更高效地与数据库交互。本文将详细介绍HQL的基本用法及高级特性。 #### 1. ...

    Hibernate-HQL-查询-Query资料

    - HQL支持在SELECT、FROM、WHERE子句中使用子查询。 - 子查询可以返回单个值,也可以返回对象列表。 8. **参数化查询** - 使用问号(?)作为占位符,防止SQL注入攻击。 - 可以使用Query接口的setParameter()...

    Spring--HQL-chaxun.zip_HQL

    在这个名为“Spring--HQL-chaxun.zip_HQL”的压缩包中,包含的文档“Spring中常用的HQL查询方法.doc”会详细讲解如何在Spring环境中使用HQL进行数据查询。 1. **HQL的基本概念**: HQL允许开发者用类和属性名称来...

    Hibernate-HQL.rar_HQL_hibernate hql

    2. 避免在HQL中使用SQL函数:尽量用Hibernate提供的函数,以确保跨数据库兼容性。 3. 优化查询性能:合理设计数据库索引,避免全表扫描,尽量减少JOIN操作。 总之,Hibernate-HQL是Java开发中处理数据库查询的重要...

    HQL的具体内容和使用

    Hibernate Query Language(HQL)是Hibernate框架中专用于对象关系映射(ORM)的查询语言,它使得开发者能够以面向对象的方式来查询数据库,而无需直接编写SQL语句。HQL支持多种查询方式,包括对象查询、属性查询、...

    关于HQL相关的论文

    《HQL:数据库查询语言在Hibernate中的应用与优化》 HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作对象关系映射...在实际项目中,根据具体需求和性能考虑,合理选择使用HQL或SQL,以达到最佳效果。

    学习HQL语句

    约束函数用于过滤数据,在 HQL 中使用 where 子句实现约束操作。where 子句的语法类似于 SQL,通过 where 子句可以对行进行过滤。 例如,select o from Order o where o.id='1234' 将返回 id 等于 1234 的所有订单...

    Hql语句注意事项总结

    1. **在Hql中使用`group by`的问题** - **统计函数与分组**:在Hql中,`group by`语句用于对数据进行分组,常与聚合函数如`sum()`、`count()`、`max()`等结合使用。例如,你可以选择特定字段进行分组,并计算每个组...

    HQL连接查询和注解使用总结

    - 在HQL查询语句的`WHERE`子句中使用子查询。 - 关键字`ALL`, `ANY`/`SOME`, `IN`, `EXISTS`等可以用于子查询。 - **HQL提供的集合操作函数**: - `size()`/`size`: 获取集合中元素的数目。 - `minIndex()`/`...

    Hql详解[文].pdf

    - `auto_import`配置允许在Hql中使用类的简单名称,若设为`true`,则无需指定完整的包名。 2. **Hql查询操作** - **普通查询**:`FROM`后面跟类名,如`String hql="FROM User";` - **带过滤条件的查询**:`WHERE...

Global site tag (gtag.js) - Google Analytics