HQL语句相关的点滴知识
1,HQL是在 hibernate 中使用的数据库查询语言,类似SQL SERVER中的SQL语言,
2,HQL区分大小写;
3,HQL中所有的都是用对象来操作,没有用表名,如HQL中输入的 from 实体名,
4, HQL语句,“from 实体名” 对应SQL中的 “select * from 表名”
5,HQL语句,“from 实体名 别名 order by 别名.实体属性名 asc|desc”
对应的SQL语句 “select * from 表名 别名 order by 别名.表字段名 asc|desc”
6, HQL语句,“from 实体名 别名 where 别名.实体属性名 比较条件”
对应的SQL语句 “select * from 表名 别名 where 别名.表字段名 比较条件”
7, HQL语句,“from 实体名 别名 where 别名.实体属性名 比较条件 order by 别名.实体属性名 asc|desc”
对应的SQL语句 “select * from 表名 别名 where 别名.表字段名 比较条件 order by 别名.表字段名 asc|desc”
8, HQL语句,“select 别名.实体属性名1, 别名.实体属性名2 [,...] from 实体名 别名”
对应的SQL语句 “select 别名.字段1, 别名.字段2 [,...] from 表名 别名”
9, HQL语句,“select 别名.实体属性名1,别名.实体属性名2 [,...] from 实体名 别名 where 别名.实体属性名 比较条件”
对应的SQL语句 “select 别名.字段1, 别名.字段2 [,...] from 表名 别名 where 别名.表字段名 比较条件”
10, HQL语句,“select 别名.实体属性名1,别名.实体属性名2 [,...] from 实体名 别名 where 别名.实体属性名 比较条件 order by 别名.实体属性名 asc|desc”
对应的SQL语句 “select 别名.字段1, 别名.字段2 [,...] from 表名 别名 where 别名.表字段名 比较条件 order by 别名.表字段名 asc|desc”
对于只是查询表中的部分字段时,对应HQL中需要指定实体的别名,同时对查出的属性名前要用实体名的别名来指定,即不能以如下的方式:
“select 实体属性名1, 实体属性名2 [,...] from 实体名 别名 where 别名.实体属性名 比较条件” //错误语句
原因是在ORM映射转化等过程容易出错,选出的字段有时找不到映射的数据类型,容易出如下错误:
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode +-[IDENT] IdentNode: “出错实体属性名”