hibernate mysql setFirstResult 方法问题...

yangzhiqiang222 2008-02-28 12:59:17
1.项目现在从oracle转移到mysql项目.但是里面有一些方法已经不能使用不知道是什么问题.
首先是分页.我用的mysql版本是 4.0 配合hibernate进行分页.在没有转移之前 分页是好使.
请看代码.


public List queryObjectsToPages(final HQuery hquery) {
HibernateTemplate hibernateTemplate = new HibernateTemplate(getSessionFactory());
return (List) hibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
List itr = null;
try {
StringBuffer query_str = new StringBuffer(hquery.getQueryString());
if (hquery.getOrderby() != null) {
query_str.append(hquery.getOrderby());
}
// 是否要分组
if (hquery.getGroupby() != null) {
query_str.append(hquery.getGroupby());
}
Query query = session.createQuery(query_str.toString());
setQueryParams(hquery, query);
// 是否存在分页,当hquery.getPageStartNo()==0是不分页
if (hquery.getPageStartNo() != 0) {
long pageno = hquery.getPageStartNo();
query.setFirstResult(Integer.parseInt(Long.toString(pageno - 1))* hquery.getRowsPerpage());
query.setMaxResults(hquery.getRowsPerpage());
}
itr = query.list();//<1>
} catch (Exception e) {
e.printStackTrace();
}
return itr;
}
});
}

---------------------------------------------------
上边是用oracle的时候进行分页..但是换成mysql后就报错误 在 <1> 这里报错.分析应该是query.setFirstResult这里的错误..后来看sql 她查询后 用的是 rownum方法...mysql没有这个方法.我猜是这里的错误 所以我又改可一下上边的方法..

public List queryObjectsToPages(final HQuery hquery) {
HibernateTemplate hibernateTemplate = new HibernateTemplate(getSessionFactory());
return (List) hibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
List itr = null;
try {
StringBuffer query_str = new StringBuffer(hquery
.getQueryString());
// 是否要排序
if (hquery.getOrderby() != null) {
query_str.append(hquery.getOrderby());
}
// 是否要分组
if (hquery.getGroupby() != null) {
query_str.append(hquery.getGroupby());
}
Query query = session.createQuery(query_str.toString());
if (hquery.getPageStartNo() != 0) {
long pageno = hquery.getPageStartNo();
int first = Integer.parseInt(Long.toString(pageno - 1))* hquery.getRowsPerpage();
int end =hquery.getRowsPerpage();
query_str.append(" limit ").append(first).append(",").append(end);
}

setQueryParams(hquery, query);
itr = query.list();//////<2>
} catch (Exception e) {
e.printStackTrace();
}
return itr;
}
});
}


-------------------------------------
这个时候返回的 <2>里面把数据库所有数据都返回了..
但是我用
select * from USERS as a where 1=1 order by a.id desc limit 0,10

查询还有好使...
请朋友帮我看看是那里出了问题........
...全文
377 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
llddy 2008-02-28
  • 打赏
  • 举报
回复
恩 配置文件问题 以后主意点..
yangzhiqiang222 2008-02-28
  • 打赏
  • 举报
回复
ok解决了 配置文件的问题...

郁闷...
lanzhengwu 2008-02-28
  • 打赏
  • 举报
回复
Query query = session.createQuery(query_str.toString());
这样的话query已经执行了,再在后面写query_str.append(" limit ").append(first).append(",").append(end);
已经对结果没意义了,所以返回所有的结果集.

if (hquery.getPageStartNo() != 0) {
long pageno = hquery.getPageStartNo();
int first = Integer.parseInt(Long.toString(pageno - 1))* hquery.getRowsPerpage();
int end =hquery.getRowsPerpage();
query_str.append(" limit ").append(first).append(",").append(end);
}
Query query = session.createQuery(query_str.toString());
这样试试....
还有setQueryParams(hquery, query);
这是什么东西,倒是没看懂..

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧