在很多时候,我们负责的项目中,在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,通常的原因是:我们使用了标准的sql语句,开启的确是hibernate的面向对象的语句 sessionFactory.getCurrentSession().createQuery(sql);

我们应改成 sessionFactory.getCurrentSession().createSQL(sql);就可以了。

  但有时项目要求必须要使用hql,比如说将相应的接口都封装成了jar包,本人就遇到了这样的情况,在用hql语句比较当前时间时,一开始使用sql语句进行拼接,结果一直报错。在这里给大家展示一下Hql常用的函数吧:

  

 函数名称 说明 类型 支持 使用方法 备注
ABS(n) 取绝对值 数学函数 JPAQL HQL ABS(column_name[数字类型对象属性])  
SQRT(n) 取平方根 数学函数 JPAQL HQL SQRT(column_name[数字类型对象属性])  
MOD(x,y) 取余数 数学函数 JPAQL HQL MOD([对象属性(数字)或值],[对象属性(数字)或值]) 数字必须是整型,返回参数1/参数2得的余数
SIZE(c) 方法集合内对象数量 集合函数 JPAQL HQL    
MINELEMENT(c) 返回集合中最小元素 集合函数 HQL    
MAXELEMENT(c) 返回集合中最大元素 集合函数 HQL    
MININDEX(c) 返回索引集合最小索引 集合函数 HQL    
MAXINDEX(c) 返回索引集合最大索引 集合函数 HQL    
MAX(n) 返回最大值 集合函数 JPQHQL HQL    
MIN(n) 返回最小值 集合函数 JPQHQL HQL    
COUNT(n) 返回计数 集合函数 JPQHQL HQL    
CONCAT(s1,s2) 连接连个字符串 字符串函数 JPQHQL HQL CONCAT([对象属性],[对象属性])  
SUBSTRING(s,offset,length) 返回子串 字符串函数 JPQHQL HQL SUBSTRING([要截取的字符串属性字段],开始位置,截取长度)  
TRIM([[BOTH/LEADING/TRAILING]] char FROM s) 默认去掉字符串两面的空格 字符串函数 JPQHQL HQL TRIM([字符串对象属性列]) 将字段两端的空格去掉
LOWER(s) 小写 字符串函数 JPQHQL HQL LOWER([字符串对象属性列]) 将该列结果含有的字母全部大写
UPPER(s) 大写 字符串函数 JPQHQL HQL UPPER([字符串对象属性列]) 将该列结果含有的字母全部大写 
LENGTH(s) 返回字符串长度 字符串函数 JPQHQL HQL LENGTH(字段名) 返回字段内容的长度,包括数字。null值返回null.
CURRENT_DATE() 返回数据库当前日期 时间函数 JPAQL HQL CURRENT_DATE() 返回数据库当前日期
CURRENT_TIME() 时间 时间函数 JPAQL HQL CURRENT_TIME() 返回数据库当前时间
SECOND(d) 从日期中提取具体秒 时间函数 HQL SECOND(时间字段) 空的时候返回null
MINUTE(d) 从日期中提取具体分 时间函数 HQL MINUTE(时间字段) 空的时候返回null
HOUR(d) 从日期中提取具体小时 时间函数 HQL HOUR(时间字段 空的时候返回null
DAY(d) 从日期中提取具体天 时间函数 HQL DAY(时间字段) 空的时候返回null
MONTH(d) 从日期中提取具体月 时间函数 HQL MONTH(时间字段) 空的时候返回null
YEAR(d) 从日期中提取具体年 时间函数 HQL YEAR(时间字段) 空的时候返回null

eg:数据库某个时间与当前时间进行比较

 1. String hql = "FROM " + User.class.getName() + " WHERE (TO_DAYS(registerDate) >= TO_DAYS(current_timestamp()) AND TO_DAYS(registerDate) <  TO_DAYS(current_timestamp()) + 1)   ";

 2.   String hql = "FROM " + User.class.getName() + " WHERE UNIX_TIMESTAMP(insertTime) > UNIX_TIMESTAMP(current_timestamp()) - 24 * 60 * 60 ";

注意:hql语句与sql语句都不推荐使用current_date() - 1或者currentdate()+1这种写法,通常情况下是没有问题,但遇到特殊情况就会产生异常。例如当前日期为11月1号,则current_date() - 1会生成日期1970-01-01,然后条件查询的时候就查询不出来任何东西。

Hibernate中HQL函数汇总及获取当前时间进行比较举例的更多相关文章

  1. OpenCV图像处理中常用函数汇总(1)

    //俗话说:好记性不如烂笔头 //用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总: Mat srcImage = imread("C:/Us ...

  2. Hibernate中HQL的日期差值计算,可计算相差多少秒

    最近有个业务需求就是计算订单创建时间离现在超过 4 小时的订单都查找出来! 那么就需要用到日期函数了. 网上找了一下总共的日期函数有一下几个: CURRENT_DATE() 返回数据库当前日期 时间函 ...

  3. thinkphp中的内置操作数据库与mysql中的函数汇总

    8.4.4 Model类getModelName() 获取当前Model的名称getTableName() 获取当前Model的数据表名称switchModel(type,vars=array()) ...

  4. javascript中常用函数汇总

    js中函数很多,在实际项目开发中,函数的应用可以很大程度上简化我们的代码,所以在此记下开发中js中常用的函数,增强记忆. 1.isNaN(X):函数用于检查其参数是否是非数字值. 如果 x 是特殊的非 ...

  5. 实现系统函数time,获取当前时间与UTC的间隔

    因种种原因,最近很少上cnblogs了.刚写了一个实现time的函数,可以通过该函数获取当前时间与1970年1月1日 0时0分0秒的差值,精确到秒,可以用在某些没有时候使用time不正确而不得不调用硬 ...

  6. hibernate 中HQL查询

    由于比较简单,在此处只写一些HQL语言. 表关系,多对一. CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `uname` varchar( ...

  7. hibernate中HQL练习时候一个小小的错误导致语法异常

    package cn.db.po.test; import java.util.List; import cn.db.po.User; import cn.db.po.biz.UserBiz; pub ...

  8. hibernate中HQL多对多的查询

    现有三张表 TLXPURCHASE.采购事项审批表,TLXPURCHASEACTIVITY.采购招标活动对应表,TLXACTIVITY.招标活动表,采购事项审批表和采购活动表是多对多关系.java中定 ...

  9. Hibernate 中Hql 查询中间表的用法

    案例简述: 项目中存在User 用户表 和 Role 角色表 它们之间是多对多的关系 在User类定义中 使用hibernate注解 //角色列表 @ManyToMany(targetEntity = ...

随机推荐

  1. CSS active选择器与CSS hover选择器

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  2. java udp服务器设计源码

    根据个人理解写的,轻喷. 没什么大的逻辑,直接上代码. UDPServer.java package mySocket;/* * 服务器端 */import java.awt.GridLayout;i ...

  3. ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)

    前言 IOC的重要性 大家都清楚..便利也都知道..新的ASP.NET Core也大量使用了这种手法.. 一直憋着没写ASP.NET Core的文章..还是怕误导大家.. 今天这篇也不是讲Core的 ...

  4. hack在微信等webview中无法修改document.title的情况

    var $body = $('body'); document.title = '确认车牌'; // hack在微信等webview中无法修改document.title的情况 var $iframe ...

  5. 自定义MapReduce中数据类型

    数据类型(都实现了Writable接口) BooleanWritable 布尔类型 ByteWritable 单字节数值 DoubleWritable 双字节数值 FloatWritable 浮点数 ...

  6. input的文件上传图片

    <img id="headIMG" src="img/header_default.jpg"/> <input type="file ...

  7. voa 2015 / 4 / 26

    Now, Words and Their Stories, a VOA Special English program about American expressions. I'm Rich Kle ...

  8. nodejs-ORM 操作数据库中间件waterline的使用

    waterline和Sails.js同一团队开发,支持几乎所有的主流数据库,是nodejs下一款非常强大的orm,可以显著提升开发效率 一.waterline支持的数据库 二.waterline的配置 ...

  9. Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析

    QQ空间说说抓取难度比较大,花了一个星期才研究清楚! 代码请移步到GitHub GitHub地址:https://github.com/20100507/Qzone [没有加入多线程,希望你可以参与进 ...

  10. 常用PHP函数

    md5_file() 生成md5 $zip = new \ZipArchive(); if($zip->open($savepath.$key) === TRUE){ $zip ->ext ...