使用hibernate3的createSQLQuery遇到的问题
为了给访问加速,把DAO中的一些HQL的操作改成了SQL,其实最主要的原因是:操作的是多张表,返回的数据也来源于多个表的字段;
String sql = “select A.id ID, A.name NAME, B.salary SALARY from employee A , Salary B where.......”;
Query query =getSession().createSQLQuery(sql)
.setResultTransformer(Transformers.aliasToBean(ReturnEmployee.class));
由于返回的ID, NAME, SALARY 非一个和表对应的一个BEAN,所以自己需要建立一个ReturnEmployee的BEAN,属性包括ID, NAME, SALARY;在mysql下调试,成功。
但是在ORACLE环境下却报错:
org.hibernate.PropertyNotFoundException: Could not find setter for ID on class com.ReturnEmployee
经过几个小时的查错,调试,没有发现问题的所在,只能摆脱GOOGLE了,最后在国外的一个论坛上找到了答案:
this is actually a limitation of some databases which return alias all uppercase instead of using the casing you actually specified.
until then use .addScalar(..) to workaround it.
原来是Hibernate对ORALCE的支持有BUG,所以修改代码为:
Query query = getSession().createSQLQuery(sql).addScalar("ID")
.addScalar("NAME").addScalar("SALARY");
就可以了,需要注意的是
List employeeData = query.list();
返回的employeeData 中的数据是object[],这样取值:
List employeeBean = new ArrayList();
for (int i = 0; i < employeeData.size(); i++) {
Employee employee = new Employee();//把"裸"数据组装到自己的employee类
Object[] object = (Object[]) employeeData.get(i);
employee.setId(object[0].toString());
employee.setName(object[1].toString());
employee.setOrgType(object[2].toString());
employeeBean.add(employee);
}
分享到:
相关推荐
如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...
在给定的文件“Hibernate的char问题.txt”中,虽然描述较为模糊,但我们可以根据提供的 SQL 语句推测出,这里讨论的是在使用 Hibernate 进行数据查询时,如何正确地处理 `char` 类型的数据字段。 #### 三、问题分析...
在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射为一个单一的字符,而不是整个字符串。这对于数据处理来说显然是不正确的...
在处理涉及多表的查询时,可能会遇到字段名冲突的问题。为了解决这个问题,可以使用别名: ```java List<Cat> cats = sess.createSQLQuery("select {cat.*} from cats cat") .addEntity("cat", Cat.class) .list...
在使用Hibernate进行数据查询时,有时会遇到需要使用子查询的情况。然而,正如你所描述的,Hibernate的HQL(Hibernate Query Language)并不直接支持在`FROM`子句后跟一个子查询,这与标准的SQL语法有所差异。在HQL...
7. Native SQL:尽管HQL是主要的查询方式,但Hibernate也支持直接执行SQL语句,包括使用`Session.createSQLQuery()`方法和映射结果到Java对象。 8. 第二级缓存:为了提高性能,Hibernate支持第二级缓存,它可以缓存...
在每次更新后调用`session.flush()`强制Hibernate执行当前的数据库操作,然后使用`session.evict(entity)`将实体从缓存中移除。这样做可以确保每个更新操作仅执行一次,并且避免了持久化上下文中的内存浪费。 ```...
本篇文章主要介绍初学者在学习Hibernate时会遇到的基础语句,通过简单的示例帮助读者快速上手并理解Hibernate的基本操作。 #### 二、基础语句详解 ##### 1. 迭代器方式(Iterator) - **应用场景**:当需要遍历...
Hibernate是Java领域中一款强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,大大简化...如果你在学习过程中遇到任何问题,记得在CSDN上搜索"Endeavor_",博主将乐意与你一同探讨和解答。
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的SQL查询。...在使用过程中遇到任何问题,欢迎继续提问或者参与相关社区讨论。
标题"hibernate_journey"暗示了我们将探讨的是一个关于Hibernate的学习过程或者项目实践,而"wrongkey的冬眠之旅"可能是指作者在学习或使用Hibernate过程中遇到的问题及解决经验。 Hibernate基于对象关系映射(ORM...
在使用Hibernate进行数据查询时,我们常常会遇到两种方式来构造查询:`createQuery`和`createSQLQuery`。这两种方法都是Hibernate提供的,但它们在功能和使用上有所不同。 `createQuery`是基于Hibernate Query ...
本文将深入探讨标题和描述中提到的“com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作”这一异常,以及如何在使用Hibernate、Struts进行分页时避免这一问题。我们将从异常的根本原因...
4. **createSQLQuery is not valid without active transaction** Hibernate操作需要在事务中进行,这个错误提示没有活动的事务。确保在执行查询前启动了事务,并在完成后提交或回滚。 5. **ERROR 1129 (00000): ...
对于每个需要调用的存储过程,我们需要定义一个HBM(Hibernate Mapping By Example)XML文件,或者使用Fluent NHibernate的映射API。下面我们将通过一个简单的增删改查例子来说明。 1. **增加(Insert)**: 在...
15. Hibernate的Session类提供了`createSQLQuery()`接口(A)),用于执行SQL查询并处理结果。 以上就是关于Oracle数据库管理、iBatis和Hibernate框架的相关知识点的详细说明,涵盖了从数据库对象操作到框架中的数据...