本文为博主原创文章,转载请获得原作者同意并注明来源:http://blog.csdn.net/wengminyu/article/details/78675529
项目中用到了Hibernate框架,在此记录下HQL常用函数,以备查阅,也供他人参考。
字符串连接函数。此函数接受两个或以上的参数。
List<String> callHistory = entityManager.createQuery(
"select concat( p.number, ' : ' , cast(c.duration as string) ) " +
"from Call c " +
"join c.phone p", String.class )
.getResultList();
字符串子串函数。第二个参数代表截取子串的起始位置,从1开始。第三个参数(可选)代表子串的长度。
List<String> prefixes = entityManager.createQuery(
"select substring( p.number, 1, 2 ) " +
"from Call c " +
"join c.phone p", String.class )
.getResultList();
将给定字符串中所有字母转换为大写或小写。不多解释。
和SQL中的TRIM函数一样,删除两端多余空格。
List<String> names = entityManager.createQuery(
"select trim( p.name ) " +
"from Person p ", String.class )
.getResultList();
返回给定字符串的长度。
返回给定子串(第一个参数)在字符串(第二个参数)中首次出现的位置。第三个参数(可选)代表开始搜索的位置。
List<Integer> sizes = entityManager.createQuery(
"select locate( 'John', p.name ) " +
"from Person p ", Integer.class )
.getResultList();
分别返回绝对值,取模,算数平方根。
分别返回数据库的当前日期,时间,时间戳。
返回二进制数据的长度。
List<Number> bits = entityManager.createQuery(
"select bit_length( c.duration ) " +
"from Call c ", Number.class )
.getResultList();
执行SQL的CAST函数。目标必须被转换为Hibernate的数据类型,而不是数据库中的类型。Hibernate的所有数据类型详见:data types
List<String> durations = entityManager.createQuery(
"select cast( c.duration as string ) " +
"from Call c ", String.class )
.getResultList();
执行SQL的EXTRACT函数,将datetime中的一部分(例如年份)提取出来。
List<Integer> years = entityManager.createQuery(
"select extract( YEAR from c.timestamp ) " +
"from Call c ", Integer.class )
.getResultList();
此函数有以下几个缩略版。
分别返回datetime中的年份、月份、日子、小时、分钟、秒。
List<Integer> years = entityManager.createQuery(
"select year( c.timestamp ) " +
"from Call c ", Integer.class )
.getResultList();
将给定的时间或数值类型转换为字符数据。是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函数可以用来获取实体的类型。当实体类有继承层次时,这个函数非常有用。此外,实体类别还可以被参数化。
List payments = entityManager.createQuery(
"select p " +
"from Payment p " +
"where type(p) = CreditCardPayment", Payment.class )
.getResultList();
List payments = entityManager.createQuery(
"select p " +
"from Payment p " +
"where type(p) = :type", Payment.class )
.setParameter( "type", WireTransferPayment.class)
.getResultList();
参考资料:Hibernate API
如果在本文中没有找到想要的信息,可以到上面的链接里进一步查找。