在很多时候,我们负责的项目中,在数据访问层(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. Swift三元条件运算

    三元条件运算的特殊在于它是有三个操作数的运算符,它的原型是问题?答案1:答案2.它简洁地表达根据问题成立与否作出二选一的操作.如果问题成立,返回答案1的结果; 如果不成立,返回答案2的结果. 使用三元 ...

  2. Centos使用vsfotd配置fpt服务

    ---恢复内容开始--- vsftp简介 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面. ...

  3. 2.vue 安装教程

    安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了(傻瓜式安装). 安装完成之后,打开命令行工具,输入 node -v,如下图,如果 ...

  4. java怎么发http请求

    package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...

  5. AJAX学习笔记(一)基础知识

    一.HTTP协议 1.HTTP: 计算机通过网络进行通讯的规则,用于浏览器向服务器发送请求. 2.HTTP是一种无状态的协议,无状态是指服务器端不保留任何连接相关的信息,浏览器客户端向服务器发送请求, ...

  6. Java 数据库编程 ResultSet 的 使用方法

    结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. 结果集读取数据 ...

  7. [基础架构]PeopleSoft工作原理(从浏览器发送请求开始)

    PeopleSoft体系结构是由几大组成部分构成,之前文章已经详细讲过,了解这几大组成部分是怎么协同工作的更为重要.在本文中将帮助您了解PeopleSoft的工作原理以及用户发送的请求是如何被解析以及 ...

  8. Spark的误解-不仅spark是内存计算,hadoop也是内存计算

    市面上有一些初学者的误解,他们拿spark和hadoop比较时就会说,Spark是内存计算,内存计算是spark的特性.请问在计算机领域,mysql,redis,ssh框架等等他们不是内存计算吗?依据 ...

  9. 一大波jQuery事件即将来袭!

    一.jQuery事件 1.focus()元素获得焦点 2.blur()元素失去焦点 3.change() 表单元素的值发生变化(可用于验证用户名是否存在) 4.click() 鼠标单击 5.dbcli ...

  10. php 批量进行复制文件

    php 批量进行复制文件 1.前言 目标:php批量进行复制指定的目录文件夹下所有文件复制到另一个文件夹下 所使用的的php函数:is_dir,opendir,readdir,scandir,mkdi ...