`
xm_koma
  • 浏览: 383492 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate3.0的addScalar方法

    博客分类:
  • Java
阅读更多
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。

 

分享到:
评论
1 楼 zcs540061627 2011-12-19  
留个记号 谢谢

相关推荐

    Hibernate中Sql语句

    在本例中,使用了`addScalar`方法指定结果集中的列名及其对应的Java类型,并使用`setResultTransformer`设置结果转换器为`Transformers.aliasToBean(SumPlace.class)`。 ```java query1.addScalar("productSum", ...

    hibernate将本地SQL查询结果封装成对象

    总结起来,Hibernate的本地SQL查询功能为我们提供了一种灵活的方式来执行复杂的数据库操作,同时通过`addEntity()`、`addScalar()`和`Transformers.aliasToBean()`等方法,我们可以方便地将查询结果封装成Java对象,...

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

    在Hibernate中执行原生SQL查询时,可以通过`addScalar`方法指定返回值的类型,从而改变Hibernate对char类型字段的处理方式。具体操作如下: ```java Session session = this.getSession(); SQLQuery query = ...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    List[]&gt; results = sqlQuery.addScalar("id", Hibernate.LONG).addScalar("name", Hibernate.STRING).list(); ``` 这将返回一个Object数组的列表,每个数组对应一条查询结果,数组中的元素按照SQL查询中选择字段的...

    hibernate存储过程

    - 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...

    hibernate 的createSQLQuery的几种用法

    Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat").addScalar("maxWeight", Hibernate.DOUBLE).uniqueResult(); ``` 这个查询返回了 cats 表中 weight 列的最大值。...

    hibernate调用存储过程

    Hibernate提供两种调用存储过程的方法:使用`Session.createSQLQuery()`和使用`StoredProcedureQuery`。 - **使用`Session.createSQLQuery()`** 这种方法适用于简单的存储过程调用。你可以构建一个SQL查询字符串...

    Hibernate3调用存储过程用法

    Hibernate3通过Query对象的createSQLQuery方法提供对存储过程的调用支持。它允许我们编写原生的SQL语句,包括调用存储过程,然后映射结果到Java对象。 三、具体步骤 1. **创建SQL查询** 使用Session的...

    Hibernate 函数 ,子查询 和原生SQL查询

    1. `Session.createSQLQuery(sql)`:创建一个SQL查询对象,然后可以通过addEntity(), addScalar()等方法来指定返回结果的映射。 2. `SessionFactory.openSession().createSQLQuery(sql).list()`:执行查询并获取...

    Hibernate+本地SQL查询SQLQuery宣贯.pdf

    这里的`addScalar()`方法用于指定返回的标量类型。 此外,可以在Hibernate的映射文件(hbm.xml)中定义结果集映射,然后在查询中使用: ```java List&lt;Cat&gt; cats = sess.createSQLQuery( "select {cat.*}, {kitten...

    hibernate试验

    - Hibernate的查询中,可以使用各种限定条件来过滤数据,如`setParameter()`用于设置参数,`addScalar()`用于指定返回单一列值,`setFirstResult()`和`setMaxResults()`用于分页等。 - 链接限定通常涉及表间的关联...

    Hibernate的demo

    这可能是通过`SQLQuery`对象的`addScalar()`方法来获取存储过程的返回值,或者通过`createSQLCall()`来执行带参数的存储过程。 4. **Hibernate的缓存** Hibernate提供了两级缓存机制,一级缓存是Session级别的,每...

    Hibernate学习笔记(2)

    5. Native SQL:直接执行SQL查询,通过`createSQLQuery()`创建查询,使用`addEntity()`和`addScalar()`指定结果映射。这样可以直接利用数据库特定的功能。 6. Named SQL queries:预定义的SQL查询,可以在配置文件...

    Hibernate+本地SQL查询SQLQuery.pdf

    这里,addScalar()方法用于指定返回的标量类型。 5. **结果集映射** 结果集映射允许我们在hbm.xml文件中定义查询结果如何映射到对象。例如: ```xml Select person.NAME AS {person.name}, person.AGE AS ...

    Native SQL查询 (使用SQLQuery).doc

    使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,可以使用 addScalar() 方法指定返回值的类型,也可以使用 addEntity() 方法让原生查询返回实体对象,另外还可以使用 addJoin()...

    Native-SQL查询 (1).ppt

    Hibernate提供`Session`接口的`createSQLQuery()`方法来创建一个`SQLQuery`对象,用于执行原生的SQL查询。例如,以下代码展示了如何通过Native SQL获取`guestbook`表的所有记录,并打印结果: ```java ...

    Query对象setResultTransFormer()

    在上面的代码中,我们使用 setResultTransformer() 方法将查询结果转换为 Map 对象,然后使用 addScalar() 方法将 SUMID 字段转换为 Integer 类型。 setResultTransformer() 方法是 Query 对象的一个重要方法,可以...

    Hibernat使用原生的SQL

    - **类型转换**: Hibernate不会自动将查询结果转换为对象,需要使用addScalar()或addEntity()指定映射规则。 - **SQL优化**: 考虑到性能,尽量避免过多使用原生SQL,因为这可能会丢失ORM的一些好处,如缓存、连接池...

Global site tag (gtag.js) - Google Analytics