Hibernate查询返回list对象分析学习

在一次开发中我需要从Hibernate查询返回List对象中(注:这个list对象并非一个完整的model类,而是多表查询拼凑的一些字段),取出部分数据在做一次筛选操作。但list只是一个接口类,并没有具体指明什么类型,所以我们不能轻松的获取到每个list中对象。

于是使用debug模式,我想查看一下这返回的list具体是什么类生成的。通过下图我们可以明显的看出这个list使用对象数组类new出来的。

知道具体的生成类型,我们就可以单独取出每个list中的对象,并根据对象中一些属性的值进行其他判断操作。

如下是简单的实例代码:

【Ps补充一个技巧】

对于list中的removed操作,List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。在网上搜了一下大概有三种方法解决这个问题。

1.倒过来遍历list(个人比较喜欢这种)

 

2.每移除一个元素以后再把i移回来

 

3.使用iterator.remove()方法删除

org.hibernate.exception.GenericJDBCException异常

org.hibernate.exception.GenericJDBCException异常

有3种可能:
1.数据库没有启动
2.数据库连接url没写正确,

  • ip地址;
  • 数据库名【数据库是否存在?还是名字写错】;
  • 检查用户名、密码是否正确;

3.数据库连接驱动包不正确、不匹配,或者甚至没有。
检查lib目录下是否有对应数据库的jar包。

HQL学习总结

hql语句是区分大小写的。
查询时候表名必须和实体类(po)相同,而查询的字段必须和实体类的属性名相同(而不是数据库的字段名)。
hql是面向对象的查询语句。
注意:在hql模糊查询中,在“%”的两旁要加上单引号,eg: LIKE ‘%value%’,否则会出错。
包含where子句的查询,使用”where 1=1″,如果后面的查询条件都不符合,会保证语法的正确性。
包含in子句的查询,使用”in(”, …)”,如果没有其他限定范围,同样也会保证语法的正确性。
在hql语句中“=”后面为string类型时,应写成 =’xxxx’ 形式,否则hql语句会报错。
在hql语句中escape ‘X’,会将 X 出现之后的字符视为非特殊字符。
在hql模糊查询中包含“”和“%”特殊字符,进行查询 1)“”替换为“/” like ‘%/..%’ espase ‘/’; 2)“%”替换为“/%” like ‘%/%..%’ espase ‘/’;