HQL常用函数

本文为博主原创文章,转载请获得原作者同意并注明来源:http://blog.csdn.net/wengminyu/article/details/78675529
项目中用到了Hibernate框架,在此记录下HQL常用函数,以备查阅,也供他人参考。


CONCAT

字符串连接函数。此函数接受两个或以上的参数。

List<String> callHistory = entityManager.createQuery(
    "select concat( p.number, ' : ' , cast(c.duration as string) ) " +
    "from Call c " +
    "join c.phone p", String.class )
.getResultList();

SUBSTRING

字符串子串函数。第二个参数代表截取子串的起始位置,从1开始。第三个参数(可选)代表子串的长度。

    List<String> prefixes = entityManager.createQuery(
    "select substring( p.number, 1, 2 ) " +
    "from Call c " +
    "join c.phone p", String.class )
.getResultList();

UPPER, LOWER

将给定字符串中所有字母转换为大写或小写。不多解释。

TRIM

和SQL中的TRIM函数一样,删除两端多余空格。

List<String> names = entityManager.createQuery(
    "select trim( p.name ) " +
    "from Person p ", String.class )
.getResultList();

LENGTH

返回给定字符串的长度。

LOCATE

返回给定子串(第一个参数)在字符串(第二个参数)中首次出现的位置。第三个参数(可选)代表开始搜索的位置。

List<Integer> sizes = entityManager.createQuery(
    "select locate( 'John', p.name ) " +
    "from Person p ", Integer.class )
.getResultList();

ABS, MOD, SQRT

分别返回绝对值,取模,算数平方根。

CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP

分别返回数据库的当前日期,时间,时间戳。

BIT_LENGTH

返回二进制数据的长度。

List<Number> bits = entityManager.createQuery(
    "select bit_length( c.duration ) " +
    "from Call c ", Number.class )
.getResultList();

CAST

执行SQL的CAST函数。目标必须被转换为Hibernate的数据类型,而不是数据库中的类型。Hibernate的所有数据类型详见:data types

List<String> durations = entityManager.createQuery(
    "select cast( c.duration as string ) " +
    "from Call c ", String.class )
.getResultList();

EXTRACT

执行SQL的EXTRACT函数,将datetime中的一部分(例如年份)提取出来。

List<Integer> years = entityManager.createQuery(
    "select extract( YEAR from c.timestamp ) " +
    "from Call c ", Integer.class )
.getResultList();

此函数有以下几个缩略版。

YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

分别返回datetime中的年份、月份、日子、小时、分钟、秒。

List<Integer> years = entityManager.createQuery(
    "select year( c.timestamp ) " +
    "from Call c ", Integer.class )
.getResultList();

STR

将给定的时间或数值类型转换为字符数据。是CAST的缩略版。

List<String> timestamps = entityManager.createQuery(
    "select str( c.timestamp ) " +
    "from Call c ", String.class )
.getResultList();
List<String> timestamps = entityManager.createQuery(
    "select str( cast(duration as float) / 60, 4, 2 ) " +
    "from Call c ", String.class )
.getResultList();

||

和SQL一样,Hibernate还提供了||操作符用于字符串拼接。不过由于JPQL(Java Persistence Query Language)中没有定义这个操作符,因此尽量避免使用。

String name = entityManager.createQuery(
    "select 'Customer ' || p.name " +
    "from Person p " +
    "where p.id = 1", String.class )
.getSingleResult();

TYPE

TYPE函数可以用来获取实体的类型。当实体类有继承层次时,这个函数非常有用。此外,实体类别还可以被参数化。

List<Payment> payments = entityManager.createQuery(
    "select p " +
    "from Payment p " +
    "where type(p) = CreditCardPayment", Payment.class )
.getResultList();
List<Payment> payments = entityManager.createQuery(
    "select p " +
    "from Payment p " +
    "where type(p) = :type", Payment.class )
.setParameter( "type", WireTransferPayment.class)
.getResultList();

参考资料:Hibernate API
如果在本文中没有找到想要的信息,可以到上面的链接里进一步查找。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值