HQL常用函数

来源:互联网 发布:淘宝模版如何制作 编辑:程序博客网 时间:2024/06/05 07:10

本文为博主原创文章,转载请获得原作者同意并注明来源: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
如果在本文中没有找到想要的信息,可以到上面的链接里进一步查找。

原创粉丝点击