Hibernate中的HQL(Hibernate Query Language)语句和SQL语句有以下主要区别:
- 查询对象:
- HQL查询对象是实体对象,SQL查询的对象是数据库表。
例如:
Query hqlQuery = session.createQuery("from Customer"); // HQL查询Customer对象
Query sqlQuery = session.createSQLQuery("SELECT * FROM t_customer"); // SQL查询t_customer表
- 使用实体名和属性:
- HQL使用实体名和属性,SQL使用表名和列名。
例如:
Query hqlQuery = session.createQuery("from Customer c where c.name = ?");
Query sqlQuery = session.createSQLQuery("SELECT * FROM t_customer WHERE name = ?");
- 支持投影:
- HQL支持SELECT子句,可以投影实体的部分属性。SQL查询默认为*。
例如:
Query hqlQuery = session.createQuery("select c.name, c.age from Customer c");
Query sqlQuery = session.createSQLQuery("SELECT * FROM t_customer");
- 支持联表查询:
- HQL支持简单的联表查询,SQL支持所有类型的联表查询。
例如:联表查询订单及关联的客户
HQL:
Query hqlQuery=session.createQuery("from Order o inner join o.customer c where c.name = ?");
Query sqlQuery=session.createSQLQuery("SELECT * FROM t_order o INNER JOIN t_customer c ON o.customer_id = c.id WHERE c.name = ?");
除此之外,HQL还支持集合查询.分组.聚合.子查询等,功能较为强大。