//就不提被虐了多少次了,明明一样的方式用HQL就是效果不同,被逼无路,又不得不实现分页,因此就有了下面的代码
public Page getAllWaitWork(String staffID, String roleIDs, Page page) {
StringBuilder sb = new StringBuilder(
"select count( distinct v.processInstanceId) from WaitWorkVO v ");
sb.append("where (v.actorId = 's_" + staffID + "'");
if (roleIDs != null && !"".equals(roleIDs)) {
String roleIDstr[] = roleIDs.split(",");
for (int i = 0; i < roleIDstr.length; i++) {
sb.append(" or v.actorId = 'r_" + roleIDstr[i] + "'");
}
}
sb.append(" ) ");
Query query = this.getSession().createQuery(sb.toString());// todo
List list = query.list();
int pageSize = page.getPageSize();
int curPage = page.getCurrentPage();
int totalSize = Integer.parseInt(list.get(0).toString());// todo
// bug可能超过整形最大?
int pages = totalSize / pageSize + ((totalSize % pageSize) > 0 ? 1 : 0);
int endPage = totalSize / pageSize
+ ((totalSize % pageSize) > 0 ? 1 : 1);
if (curPage < 1)
curPage = 1;
if (curPage > pages)
curPage = pages;
if (endPage < 1)
endPage = 1;
if (endPage > pages)
endPage = pages;
StringBuilder sb2 = new StringBuilder(
"select distinct v.ID_ ,v.BD_ID,v.PROCESSID,v.PRO_INFO,v.SPONSOR,v.SPONSOR_ID,v.PROCESSOR,"
+ "v.TITLE,v.INC_CODE,v.PROPOSER_TIME,v.PROPOSER_NAME,v.TASKNAME,v.BEGAIN_DATE,v.END_DATE from v_widget_waitwork_view v");
sb2.append(" where (v.actorId = 's_" + staffID + "'");
if (roleIDs != null && !"".equals(roleIDs)) {
String roleIDstr[] = roleIDs.split(",");
for (int i = 0; i < roleIDstr.length; i++) {
sb2.append(" or v.actorId = 'r_" + roleIDstr[i] + "'");
}
}
sb2.append(" ) order by v.proposer_Time desc ");
query = this.getSession().createSQLQuery(sb2.toString());
List data = query.setFirstResult(pageSize * (curPage - 1))
.setMaxResults((endPage - curPage + 1) * pageSize).list();
return new Page(curPage, pageSize, pages, data, totalSize);
}
分享到:
相关推荐
hibernate 的createSQLQuery的几种用法总结
关于hibernate 的createQuery和createSqlQuery 的区别
使用参数名称而不是参数索引/位置准备和执行 SQL 的库 可 在处理包含大量用户传递参数的冗长 SQL 查询时很有用。 设想 假设,在 PreparedStatement 中,用户参数表示为“?” 并使用位置标识(给定参数在给定的多个...
18.1.8 使用SQL风格的交叉连接和隐式内连接 18.1.9 关联级别运行时的检索策略 18.2 投影查询 18.3 报表查询 18.3.1 使用聚集函数 18.3.2 分组查询 18.3.3 优化报表查询的性能 18.4 高级查询技巧 ...
18.1.8 使用SQL风格的交叉连接和隐式内连接 18.1.9 关联级别运行时的检索策略 18.2 投影查询 18.3 报表查询 18.3.1 使用聚集函数 18.3.2 分组查询 18.3.3 优化报表查询的性能 18.4 高级查询技巧 ...
18.1.8 使用SQL风格的交叉连接和隐式内连接 18.1.9 关联级别运行时的检索策略 18.2 投影查询 18.3 报表查询 18.3.1 使用聚集函数 18.3.2 分组查询 18.3.3 优化报表查询的性能 18.4 高级查询技巧 ...
18.1.8 使用SQL风格的交叉连接和隐式内连接 18.1.9 关联级别运行时的检索策略 18.2 投影查询 18.3 报表查询 18.3.1 使用聚集函数 18.3.2 分组查询 18.3.3 优化报表查询的性能 18.4 高级查询技巧 ...
使用hibernate的query调用oracle的存储过程/function,包含例子,源码以及数据库文件