public List getAllRegionRateStatistics( final List<CodeNameMapBean> regions_CodeNameBean, final Date beginDate, final Date endDate, final String seq) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { String sql = ""; if (regions_CodeNameBean == null || regions_CodeNameBean.size() == 0) { return null; } else { for (int i = 0; i < regions_CodeNameBean.size(); i++) { sql = sql + " or rg.regionId=" + ((CodeNameMapBean) regions_CodeNameBean .get(i)).getCodeId(); } Query query = session .createSQLQuery("select EStat_Sub_PStat.stid stid,sum(up) up,sum(dn) dn,sum(updn) updn,sum(allc) allc from " + " (SELECT rg.regionId AS stid," + "sum(st.upCount) AS up," + "sum(st.dnCount) AS dn," + "sum(st.updnCount) AS updn," + "min(p.finishedCount) AS allc" + " from T_EquipmentRateStatistic st,T_Subregion rg,T_Portstatistic p" + " where st.subregionId=rg.subregionId " + sql.replaceFirst(" or ", "and (") + ")" + " and p.subregionId=rg.subregionId" + " and p.updateTime>=:startUpTime and p.updateTime<:endUpTime " + " and st.updateTime>=:start_uptime and st.updateTime<:end_uptime " + " group by rg.regionId,st.subregionid) EStat_Sub_PStat" + " group by EStat_Sub_PStat.stid").addScalar("STID", Hibernate.LONG).addScalar("UP", Hibernate.LONG) .addScalar("DN", Hibernate.LONG).addScalar("UPDN", Hibernate.LONG).addScalar("ALLC", Hibernate.LONG); // + " order by sum(st." // + seq + ")/sum(st.allCount)"); query.setParameter("startUpTime", new Timestamp(beginDate .getTime())); query.setParameter("endUpTime", new Timestamp(endDate .getTime())); query.setParameter("start_uptime", new Timestamp(beginDate .getTime())); query.setParameter("end_uptime", new Timestamp(endDate .getTime())); return query.list(); } } }); }
如果最外面的一层:select EStat_Sub_PStat.stid stid,sum(up) up,sum(dn) dn,sum(updn) updn,sum(allc) allc from。。。。sum(up)这些不取别名的话,后面如果用到了addScalar("UP", Hibernate.LONG)这些的时候,会报一个java.sql.SQLException: 列名无效。如果sum(up)这些不取别名,并且不用addScalar("UP", Hibernate.LONG)这些的时候,该查询只会取到第一个字段EStat_Sub_PStat.stid。
相关推荐
在Hibernate中执行原生SQL查询时,可以通过`addScalar`方法指定返回值的类型,从而改变Hibernate对char类型字段的处理方式。具体操作如下: ```java Session session = this.getSession(); SQLQuery query = ...
总结起来,Hibernate的本地SQL查询功能为我们提供了一种灵活的方式来执行复杂的数据库操作,同时通过`addEntity()`、`addScalar()`和`Transformers.aliasToBean()`等方法,我们可以方便地将查询结果封装成Java对象,...
在本例中,使用了`addScalar`方法指定结果集中的列名及其对应的Java类型,并使用`setResultTransformer`设置结果转换器为`Transformers.aliasToBean(SumPlace.class)`。 ```java query1.addScalar("productSum", ...
List[]> results = sqlQuery.addScalar("id", Hibernate.LONG).addScalar("name", Hibernate.STRING).list(); ``` 这将返回一个Object数组的列表,每个数组对应一条查询结果,数组中的元素按照SQL查询中选择字段的...
- 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...
Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat").addScalar("maxWeight", Hibernate.DOUBLE).uniqueResult(); ``` 这个查询返回了 cats 表中 weight 列的最大值。...
Hibernate提供两种调用存储过程的方法:使用`Session.createSQLQuery()`和使用`StoredProcedureQuery`。 - **使用`Session.createSQLQuery()`** 这种方法适用于简单的存储过程调用。你可以构建一个SQL查询字符串...
Hibernate3通过Query对象的createSQLQuery方法提供对存储过程的调用支持。它允许我们编写原生的SQL语句,包括调用存储过程,然后映射结果到Java对象。 三、具体步骤 1. **创建SQL查询** 使用Session的...
这里的`addScalar()`方法用于指定返回的标量类型。 此外,可以在Hibernate的映射文件(hbm.xml)中定义结果集映射,然后在查询中使用: ```java List<Cat> cats = sess.createSQLQuery( "select {cat.*}, {kitten...
1. `Session.createSQLQuery(sql)`:创建一个SQL查询对象,然后可以通过addEntity(), addScalar()等方法来指定返回结果的映射。 2. `SessionFactory.openSession().createSQLQuery(sql).list()`:执行查询并获取...
- Hibernate的查询中,可以使用各种限定条件来过滤数据,如`setParameter()`用于设置参数,`addScalar()`用于指定返回单一列值,`setFirstResult()`和`setMaxResults()`用于分页等。 - 链接限定通常涉及表间的关联...
这可能是通过`SQLQuery`对象的`addScalar()`方法来获取存储过程的返回值,或者通过`createSQLCall()`来执行带参数的存储过程。 4. **Hibernate的缓存** Hibernate提供了两级缓存机制,一级缓存是Session级别的,每...
5. Native SQL:直接执行SQL查询,通过`createSQLQuery()`创建查询,使用`addEntity()`和`addScalar()`指定结果映射。这样可以直接利用数据库特定的功能。 6. Named SQL queries:预定义的SQL查询,可以在配置文件...
这里,addScalar()方法用于指定返回的标量类型。 5. **结果集映射** 结果集映射允许我们在hbm.xml文件中定义查询结果如何映射到对象。例如: ```xml Select person.NAME AS {person.name}, person.AGE AS ...
使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,可以使用 addScalar() 方法指定返回值的类型,也可以使用 addEntity() 方法让原生查询返回实体对象,另外还可以使用 addJoin()...
Hibernate提供`Session`接口的`createSQLQuery()`方法来创建一个`SQLQuery`对象,用于执行原生的SQL查询。例如,以下代码展示了如何通过Native SQL获取`guestbook`表的所有记录,并打印结果: ```java ...
在上面的代码中,我们使用 setResultTransformer() 方法将查询结果转换为 Map 对象,然后使用 addScalar() 方法将 SUMID 字段转换为 Integer 类型。 setResultTransformer() 方法是 Query 对象的一个重要方法,可以...
- **类型转换**: Hibernate不会自动将查询结果转换为对象,需要使用addScalar()或addEntity()指定映射规则。 - **SQL优化**: 考虑到性能,尽量避免过多使用原生SQL,因为这可能会丢失ORM的一些好处,如缓存、连接池...