在Hibernate中,利用hql来获取对象list,并且进行遍历是非常简单的:
程序代码
String hql="from NewClasses order by Id desc";
List li=DbUtil.getSession().createQuery(hql).list();
Iterator<NewClasses> it=li.iterator();
while(it.hasNext())
{
NewClasses newclasses=it.next();
System.out.println(newclasses.getClassTitle());
System.out.println(newclasses.getAddDate());
}
但 如果用createSQLQuery()获取list 而采用上面的方法遍历时就会出现下面的错误:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
at com.zb.test.TestDbUtil.main(TestDbUtil.java:30)
程序代码
List li=DbUtil.executeQuery("select * from NewClasses order by Id desc");
Iterator<NewClasses> it=li.iterator();
while(it.hasNext())
{
NewClasses newclasses=it.next();
System.out.println(newclasses.getClassTitle());
System.out.println(newclasses.getAddDate());
}
原 因是我们没有将表与相关的实体类进行关联,我们 修改工具类的方法:
程序代码
public static List executeQuery(String sql,Class cls){
Session s=HibernateSessionFactory.getSession();
Query q = s.createSQLQuery(sql).addEntity(cls);
return q.list();
}
调 用语句改为:
List li=DbUtil.executeQuery("select * from NewClasses order by Id desc",NewClasses.class);
Ok, 搞定!
分享到:
相关推荐
在上面的代码中,我们使用 setResultTransformer() 方法将查询结果转换为 Tree 对象,然后使用 list() 方法获取查询结果,最后遍历结果集,使用 Tree 对象来获取每个字段的值。 最后,让我们总结一下 ...
这篇博客探讨了如何在Hibernate3中通过原生SQL获取部分字段,并将这些数据映射到具体的对象实例。 首先,原生SQL查询允许开发者绕过Hibernate的HQL(Hibernate Query Language),直接使用数据库的SQL语法进行查询...
而`iterator()`方法则只获取记录的主键,然后在遍历迭代器时按需执行额外的SQL查询(根据主键加载完整数据),这在处理大量数据时可以降低内存消耗,但可能会增加数据库交互的次数。 总的来说,`createQuery`适用于...
List<Customer> list = session.createSQLQuery("select * from customer") .addEntity(Customer.class) .list(); for (Customer cust : list) { System.out.println(cust); } ``` ### 基本的CRUD操作 Hibernate...
- **应用场景**:根据对象标识符(OID)获取实体对象。 - **实现方法**: - 使用`get`方法: ```java Order order = (Order) session.get(Order.class, orderId); ``` - 使用`load`方法: ```java Order ...
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
// 遍历并处理所有学生对象 } } ``` #### 4.3 条件查询 `SimpleConditionQueryTest.java`中可能包含了更复杂的条件查询,如根据年龄范围查找学生。 ```java public class SimpleConditionQueryTest { public ...
查询和过滤一对一时,可以通过`Session.get()`或`Session.load()`方法直接获取关联对象,或者在HQL查询语句中加入关联条件进行过滤。 **一对多关系(One-to-Many):** 在实体间存在一个实体可以对应多个另一个...
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
在Hibernate中,你可以通过`Session`对象的`createSQLQuery`方法创建一个SQL查询。例如: ```java Query query = session.createSQLQuery("select * from t_user usr"); ``` 执行上述代码后,Hibernate将会执行...
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
使用`iterator()`方法遍历已加载的数据集,如`orderList.iterator()`,这在处理大量数据时特别有用,可以有效降低内存消耗。 - **基于OID查询** OID(Object Identity)查询,通过`session.get()`或`session.load...
6. **结果集处理**:查询执行后,你可以调用`list()`方法获取结果集,这将返回一个包含`User`对象的列表。然后,你可以遍历这个列表,对每个对象进行操作或展示。 7. **事务管理**:为了保证数据一致性,你需要使用...
如果有结果集,可以使用`list`获取并处理结果。 - **处理结果**:如果存储过程返回结果,可以遍历结果集,转换为Java对象。 例如,对于一个名为`insertUser`的存储过程,可能的Java代码如下: ```java Session ...
在上述代码中,我们使用`list()`获取结果集,然后遍历处理。对于单个返回值,可以使用`getSingleResult()`。如果存储过程没有返回值,`execute()`方法就足够了。 5. **与MySQL结合** 在给出的标签中提到了...
使用 `request` 对象获取通过 GET 或 POST 方式传递过来的数据。 #### 45. JSP页面表的数据是用什么标签得到的 使用 `<c:forEach>` 等 JSTL 标签处理列表数据。 #### 46. JSP有哪些内置对象?作用分别是什么? - *...
在IT领域,尤其是在Java开发与数据库交互的过程中,Hibernate作为一个强大的对象关系映射(ORM)框架,为开发者提供了诸多便利。然而,在处理大量数据时,如何有效地进行批量更新和批量删除操作,是每一个开发者都...