有这样一段代码,返回的list无法转换成User对象
public List<User> getStoreList(final int pageNo,final int pageSize,final String role,final String check) {
//type is cpUser 商品type
String hql="";
if(check.equals("通过")){
hql = "from User user inner join user.roles as role where role.name='" + role + "' and user.extAttributes.attr3='通过' order by user.id desc";
}else{
//未通过,扩展可直接扩展终态hql
hql = "from User user inner join user.roles as role where role.name='" + role + "' and user.enabled=false and user.extAttributes.attr3='未审核' order by user.id desc";
}
final String query = hql;
List list = (List)this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
return session.createQuery(query)
.setFirstResult((pageNo-1)*pageSize)
.setMaxResults(pageSize)
.list();
}
});
return list;
}
弄了弄,才发现!原来是hql这个出了问题,断点加上看看list的值明明就是user对象,但就是无法转换,这是因为hibernate在表连接之后,让所有的连接表一起组成了一个对象,这个hql其实是返回了2个对象
hql = "select user"这样就搞定了,给他指定一个查询结果,不然他太勤快了都给你查询出来了,呵呵
分享到:
相关推荐
如果查询返回的是多个对象,可以使用`setResultTransformer()`配合`Transformers.aliasToBean()`将结果集转换为指定类型的对象列表: ```java query.setResultTransformer(Transformers.aliasToBean(MyEntity.class...
- 结果集转换:`addEntity()`方法用于指定查询结果应被映射到哪个实体类,`list()`或`scroll()`方法执行查询并返回结果集,这些结果集将自动封装为对应的Java对象。 5. 示例: 假设我们有一个`User`实体类,对应...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发人员将Java对象模型映射到数据库表,并在对象和数据库之间进行转换。在实际开发过程中,我们经常会遇到需要从多个表中获取数据的情况,这时就需要用到连...
本文将深入探讨Hibernate中实现多表查询的各种方法,包括Object[]形式、对象方式以及集合list形式的查询。 ### 1. Object[]形式的查询 Object[]形式的查询适用于简单的联接查询,返回的结果是一个对象数组,每个...
`list()`方法用于将查询结果转换为Java集合,通常是ArrayList或LinkedList。这种方法一次性将所有结果加载到内存,适用于结果集较小的情况。如果结果集过大,可能会导致内存溢出。 4. **iterator()方法** `...
查询结果通常为`Object[]`数组,可以通过自定义封装将其转换为更具体的对象。 总之,Hibernate HQL提供了丰富的查询功能,使得开发者能够以面向对象的方式处理数据库操作,大大提高了开发效率。通过熟练掌握HQL,...
1. `Session.createSQLQuery(sql)`:创建一个SQL查询对象,然后可以通过addEntity(), addScalar()等方法来指定返回结果的映射。 2. `SessionFactory.openSession().createSQLQuery(sql).list()`:执行查询并获取...
执行查询并将结果转换为List类型: ```java List result = query.list(); ``` 完整的分页查询方法实现如下: ```java public List getPageList(int thisNumber, int sumCount, String sql) { Session session = ...
Criteria API是Hibernate提供的另一种查询方式,它提供了一种面向对象的查询接口,允许开发者动态构建查询。这种方法更加灵活,尤其在构建复杂的查询条件时。以下是一个简单的示例: ```java Session session = ...
Hibernate也允许使用原生SQL查询,通过`createSQLQuery()`方法创建`SQLQuery`对象,然后可以使用`addEntity()`或`setResultTransformer()`将结果转换为对象。 总的来说,Hibernate的查询语言提供了一套灵活且强大...
在处理返回结果时,如果希望直接将查询结果转换为实体类对象,可以使用构造函数来指定返回的对象类型。例如,`select new 包名.类名(属性1,属性2……) from 实体类`,这需要在实体类中添加对应的带参构造方法,参数...
在Java的持久化框架Hibernate中,开发者经常需要根据特定需求查询数据库并返回对象。`Hibernate3` 提供了丰富的API来实现这样的功能,包括使用原生SQL(Native SQL)进行查询,然后将查询结果映射到Java对象上。这篇...
特别是在处理数据库操作时,利用Hibernate的强大ORM(对象关系映射)功能,可以将复杂的SQL语句转换为简单的Java代码,极大地简化了数据访问层的开发工作。在Struts+Hibernate的开发模式下,对LIST对象的操作是常见...
在源码层面,当我们调用`createQuery()`或`createCriteria()`时,Hibernate会解析HQL或Criteria构建的查询语句,生成对应的SQL,然后执行这个SQL并返回结果。 进一步地,我们可以研究Hibernate的二级缓存机制。二级...
最后,调用`list()`方法执行查询,并返回转换后的`SumPlace`对象列表。 #### 三、示例代码分析 根据给定的代码片段,我们来看一下具体是如何实现的: - **构造SQL语句**:根据传入的参数动态构建SQL查询语句。这...
本文将详细介绍Hibernate的几种主要查询方式,包括对象的状态变化、数据加载机制,以及如何通过不同方法进行条件查询。 #### 二、对象状态及其变化 在Hibernate中,一个对象可以处于三种不同的状态:自由态...
此外,HQL的查询结果默认被转换为对应的Java对象,而SQL查询结果通常是以记录集的形式返回。 #### 结论 通过上述介绍,我们可以看到Hibernate和HQL的强大之处在于它们能够提供一种简单且直观的方式来处理数据库...
HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是以类和对象为中心。例如,查询所有用户,你可以写: ```java Session session = sessionFactory.openSession(); String hql = "FROM User"; List...
### Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法 在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射...