createSQLQuery,addScalar列名用大写
public List findByGroupByMaterial(String date1,String date2){
try {
StringBuffer hql = new StringBuffer();
hql.append("SELECT t.mt_material_id ID, ")
.append(" t1.name mt_name, ")
.append(" t1.code MT_CODE, ")
.append(" SUM(t.num)NUM, ")
.append(" SUM(decode((SELECT substr(s.code, ")
.append(" 0, ")
.append(" 3) ")
.append(" FROM im_affair_type s ")
.append(" WHERE s.id = t.im_affair_type_id), ")
.append(" 'imp', ")
.append(" 1, ")
.append(" 'exp', ")
.append(" -1) * t.num * t.price) MONEY ")
.append("FROM im_affair t, ")
.append(" mt_material t1 ")
.append("WHERE t.mt_material_id = t1.id AND ")
.append(" To_date('"+date1+"', ")
.append(" 'yyyy-mm-dd') <= ")
.append(" t.accountant_date AND ")
.append(" t.accountant_date >= ")
.append(" To_date('"+date2+"', ")
.append(" 'yyyy-mm-dd') ")
// .append(" t.accountant_date BETWEEN ")
// .append(" To_date('"+date1+"', ")
// .append(" 'yyyy-mm-dd') AND ")
// .append(" To_date('"+date2+"', ")
// .append(" 'yyyy-mm-dd') ")
.append("GROUP BY t.mt_material_id, ")
.append(" t1.NAME, ")
.append(" t1.code ");
List list = session.createSQLQuery(hql.toString())
.addScalar("ID", Hibernate.LONG)//这里ID要用大写才对,不然会报列名错误
.addScalar("MT_NAME", Hibernate.STRING)//
.addScalar("MT_CODE", Hibernate.STRING)
.addScalar("NUM", Hibernate.DOUBLE)
.addScalar("MONEY", Hibernate.DOUBLE)//同上,都要大写
.list();
log.info("findByGroupByMaterial successful and the list size is "+list.size());
return list;
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw e;
}
}
分享到:
相关推荐
Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat").addScalar("maxWeight", Hibernate.DOUBLE).uniqueResult(); ``` 这个查询返回了 cats 表中 weight 列的最大值。...
Hibernate 中的 createQuery 和 createSqlQuery 区别详解 ...此外,createQuery 方法使用 HQL 语句,而 createSqlQuery 方法使用原生态的 SQL 语句。因此,在选择使用哪种方法时,需要根据实际情况进行考虑。
使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,可以使用 addScalar() 方法指定返回值的类型,也可以使用 addEntity() 方法让原生查询返回实体对象,另外还可以使用 addJoin()...
要执行原生SQL查询,可以使用`Session`对象的`createSQLQuery()`方法: ```java Session session = HibernateUtil.getSessionFactory().openSession(); SQLQuery query = session.createSQLQuery("SELECT id, name ...
在本例中,使用了`addScalar`方法指定结果集中的列名及其对应的Java类型,并使用`setResultTransformer`设置结果转换器为`Transformers.aliasToBean(SumPlace.class)`。 ```java query1.addScalar("productSum", ...
当SQL查询的结果包含部分实体属性时,可以使用`addScalar()`方法指定列与对象属性的映射。比如,以下代码展示了如何将SQL查询的结果映射到`Guestbook`对象的特定字段: ```java String sql = "select id, name, ...
在上面的代码中,我们使用 setResultTransformer() 方法将查询结果转换为 Map 对象,然后使用 addScalar() 方法将 SUMID 字段转换为 Integer 类型。 setResultTransformer() 方法是 Query 对象的一个重要方法,可以...
- **类型转换**: Hibernate不会自动将查询结果转换为对象,需要使用addScalar()或addEntity()指定映射规则。 - **SQL优化**: 考虑到性能,尽量避免过多使用原生SQL,因为这可能会丢失ORM的一些好处,如缓存、连接池...
如果存储过程有返回值,可以使用addScalar方法指定返回值类型并映射到Java对象。如果返回多条记录,可以使用list方法获取结果集。例如: ```java query.addScalar("returnColumn", Hibernate.INTEGER); List...
在某些情况下,开发者可能需要使用原生SQL查询来执行特定的数据库操作,这时就可以利用Hibernate的SQLQuery功能。本文将详细讲解如何使用Hibernate的SQLQuery进行本地SQL查询。 首先,创建SQLQuery实例是通过...
在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来进行本地SQL查询,并探讨其各种应用场景。...
然后,我们可以使用`Session.createSQLQuery()`方法创建一个本地SQL查询对象,并设置查询语句: ```java Session session = sessionFactory.openSession(); String sql = "SELECT * FROM my_table WHERE ..."; SQL...
在Java的Hibernate框架中,使用SQL语句是一个常见的需求,特别是在处理特定的数据库操作或优化查询性能时。Hibernate,作为SSH(Spring、Struts、Hibernate)三大Web开发框架之一,提供了一种优雅的方式将对象关系...
- 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...
首先,可以通过调整Hibernate的映射方式,使用`addScalar`方法显式指定字段的类型;其次,可以在SQL查询中使用`CAST`函数将char字段转换为`VARCHAR2`类型;最后,也可以考虑直接修改数据库表结构,将char类型改为`...
Hibernate提供两种调用存储过程的方法:使用`Session.createSQLQuery()`和使用`StoredProcedureQuery`。 - **使用`Session.createSQLQuery()`** 这种方法适用于简单的存储过程调用。你可以构建一个SQL查询字符串...
在上面的代码中,我们使用 `Session.createSQLQuery()` 方法创建了一个 `SQLQuery` 对象,然后使用 `addEntity()` 方法指定了查询结果的实体类型,最后使用 `list()` 方法执行查询并获取结果。 使用 ...