HQL语句表达式



1、HQL语句的功能非常丰富,where子句后支持的运算符,不仅包括SQL的运算符,也包括EJB-QL的运算符等。where子句中允许使用大部分SQL支持的表达式,包括如下种类:

(1)字符串连接:如value1||value2,或使用字符串连接函数concat(value1, value2)

(2)简单的case,case…when…then…else…end和case,case when…then…else…end等。

(3)时间操作函数:current_date()、current_time、year()等。

(4)EJB-QL3.0的函数:substring()、trim()、abs()、sqrt()等。

(5)可在where子句中使用SQL常量。

(6)在HQL语句中使用Java中的public static final类型的常量,例如Color.RED

(7)HQL语句支持使用英文问号(?)作为参数占位符,这与JDBC的参数占位符一致;也使用命名参数占位符号,方法在参数名前加英文冒号(:),例如:start_date等。

(8)如果底层数据库支持单行函数,则HQL语句也完全可以支持。


(9)支持数据库的类型转换函数,如cast(… as …),第二个参数是Hibernate的类型名,或者extract(… from ,,,),前提是底层数据库支持ANSI cast()和extract()。

2、如果在Hibernate配置文件中进行如下声明:

<property name=”hibernate.query.substitutions”>true 1,false 0</property>

上面的声明表明:HQL转换SQL语句时,将使用字符1和0来取代关键字true和false,然后将可以在表达式中使用布尔表达式。

3、有用的elements()和indices函数,用于返回指定集合的所有元素和所有索引。

4、在where子句中,有序集合(数组、List集合、Map对象)的元素可以通过【】运算符来访问。如下:

from Order order where order.items[0].id=1234

在【】中的表达式甚至可以是一个算式表达式。

5、结构变量:size、elements、indices等,只能在where子句中使用。