public List findByPage(final String hql,
final int offset, final int pageSize)
{
//通过一个HibernateCallback对象来执行查询
List list = getHibernateTemplate()
.executeFind(new HibernateCallback()
{
//实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
//执行Hibernate分页查询
List result = session.createQuery(" from Log")
.setFirstResult(1)
.setMaxResults(20)
.list();
return result;
}
});
return list;
}怕传进来的参数有错,红色数字特意改的 报错如下:org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:615)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343)
hibernateFactory.MySupportHibernate.findByPage(MySupportHibernate.java:32)
com.zoye.oa.tool.MemberServiceImpl.queryForPage(MemberServiceImpl.java:30)
com.zoye.oa.action.LogAction.findAll(LogAction.java:60)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
final int offset, final int pageSize)
{
//通过一个HibernateCallback对象来执行查询
List list = getHibernateTemplate()
.executeFind(new HibernateCallback()
{
//实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
//执行Hibernate分页查询
List result = session.createQuery(" from Log")
.setFirstResult(1)
.setMaxResults(20)
.list();
return result;
}
});
return list;
}怕传进来的参数有错,红色数字特意改的 报错如下:org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:615)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343)
hibernateFactory.MySupportHibernate.findByPage(MySupportHibernate.java:32)
com.zoye.oa.tool.MemberServiceImpl.queryForPage(MemberServiceImpl.java:30)
com.zoye.oa.action.LogAction.findAll(LogAction.java:60)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
第32行 再找找
query.setFirstResult(1);
query.setMaxResults(20);
result=query.list();
首先确定你有Log这个类,而不是表
如果你要实现分页的话最好写setFirstResult((currentPage-1)*pageSize);
Query query=session.createQuery("from Log");
query.setFirstResult(1);
query.setFirstResult((currentPage-1)*pageSize);
result=query.list();
应该没有什么问题的。
/***
* 返回list
*/
return getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)throws HibernateException, SQLException {
Query cri=session.createQuery(QBE);
cri.setFirstResult(pageSize*(currentPage-1));
cri.setMaxResults(pageSize);
return cri.list();
}
});
}
hibernate 自带分页
//query.setFirstResult(1);
//query.setMaxResults(20);
result=query.list();加上注释就查出来了,但是不能分页
Xaction.java
public String findAll(){
this.pageBean = memberService.queryForPage(30, page);
return "loginfo";
}Xserver.java
public PageBean queryForPage(int pageSize,int page){
final String hql = " from Log order by ltime desc";//查询语句
int allRow = getAllRowCount(hql);//总记录数
int totalPage = PageBean.countTotalPage(pageSize, allRow);//总页数
final int offset = PageBean.countOffset(pageSize, page);//当前页开始记录
final int length = pageSize;//每页记录数
final int currentPage = PageBean.countCurrentPage(page);
List<Log> list =findByPage(hql,offset, length);//"一页"的记录
//把分页信息保存到Bean中
PageBean pageBean = new PageBean();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.init();
return pageBean;
}Xhibernate.java
public List findByPage(final String hql,
final int offset, final int pageSize){
//通过一个HibernateCallback对象来执行查询
List list = getHibernateTemplate()
.executeFind(new HibernateCallback()
{
//实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
//执行Hibernate分页查询
Query query=session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(pageSize);
List result=query.list();
return result;
}
});
return list;
}
query.setFirstResult(1);
query.setMaxResults(20);
可以欲行,打印出来的
select
log0_.lsn as lsn5_,
log0_.loperator as loperator5_,
log0_.ldescribe as ldescribe5_,
log0_.lsql as lsql5_,
log0_.ltime as ltime5_
from
zoyeoa.dbo.log log0_
order by
log0_.ltime desc
有
query.setFirstResult(1);
query.setMaxResults(20);
不能运行,打印出:
select
log0_.lsn as lsn5_,
log0_.loperator as loperator5_,
log0_.ldescribe as ldescribe5_,
log0_.lsql as lsql5_,
log0_.ltime as ltime5_
from
zoyeoa.dbo.log log0_
order by
log0_.ltime desc limit ?
log0_.lsn as lsn5_,
log0_.loperator as loperator5_,
log0_.ldescribe as ldescribe5_,
log0_.lsql as lsql5_,
log0_.ltime as ltime5_
from
zoyeoa.dbo.log log0_
order by
log0_.ltime desc limit ?用的MySQL?
你试下 用hql = from Log order by ltime desc limit ?,?
query.setParameter(0, 起始行数),query.setParameter(1,查询行数),
看这样能不能出来
query.setParameter(0, 1);
query.setParameter(1, 30);org.springframework.orm.hibernate3.HibernateSystemException: ordinal parameter mismatch; nested exception is org.hibernate.HibernateException: ordinal parameter mismatch
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:917)
按照你的输出你配置的方言应该是mysql,但是如果你的数据库不是mysql是oracle,那肯定就有问题了。简言之:问题应该是配置的数据库方言跟实际使用的数据库不一致。可以看看这篇文章http://www.javaeye.com/topic/261
数据库是HSQLDialect,