尽管Hibernate支持直接使用Native SQL,但是在Hibernate中使用HQL进行数据查询不仅可以避免不同数据库之间的差异性,而且还可以结合Hibernate缓存机制为Hibernate应用获取更好的性能,同时HQL的语法要比SQL更为简洁。

HQL的特点如下:

1、关键字不区分大小写
   如在HQL中from与From或FROM为同一关键字,但是对类名来说严格区分大小写。如ClassA和Classa是两个不同的类。

2、自动引入持久类
   在HQL语句中Hibernate有持久化类自动引入的功能,如果代码中已经引入持久类,且其名无歧义,则该类名中可以省略包名部分。

3、同时查询多个持久化类
  from子句之后可以跟多个类名,类名之间用“,”分割,表示要在多个持久类中查询。如,使用from Product,Category查询的结果是Product类所对就的表和Category所对应的表的笛卡尔积。

4、持久化类的继承查询
   在持久化类时Hibernate会自动判定持久化类之间的继承关系,如果查询的类是某个类的父类,则返回会返回与父类及其子类所对应的所有表的数据。