hibernate分页很奇怪的问题,结果集合为0,但实际有100条记录

myepoch 2008-06-28 09:46:03
pageNo=1
pageSize=100
public static List find(String query, int pageNo, int pageSize) throws DAOException {
Session session = SessionManager.getSession();
List list;
try {
Query q = session.createQuery(query);
//q.setFirstResult( (pageNo - 1) * pageSize);
//q.setMaxResults(pageSize);
list = q.list();
}catch (HibernateException he) {
if (log.isErrorEnabled()) {
log.error("Error:find method error!", he);
}
throw new DAOException(he);
}finally {
if (session != null && session.isOpen()) {
SessionManager.closeSession(session);
}
}
return list;
}

一个非常奇怪的问题,在数据库中有130条记录。我的目的是取出100条。
但是只要我设置了setFirstResult和setMaxResults方法,
那么查询的结果为零,除非将其注释,如上。才能查处100条记录
...全文
103 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
myepoch 2008-06-29
  • 打赏
  • 举报
回复
CmsArticle.hbm.xml 是CmsArticle.java的映射文件
<class
name="pojo.CmsArticle"
table="tbnc_CMSarticle"
dynamic-update="true"

>
----------------------------------------------

CmsArticleNew.hbm.xml 是CmsArticleNew.java的映射文件
<class
name="pojo.CmsArticleNew"
table="tbnc_CMSarticle"
dynamic-update="true"

>
------------------------------------------

hibenate.hbm.xml
<mapping resource="pojo/CmsArticle.hbm.xml" />
<mapping resource="pojo/CmsArticleNew.hbm.xml" />
------------------------------------------
CmsArticleNew继承CmsArticle类,
注意:CmsArticle类仅仅多了一个clob类型的字段而已,其他字段属性与CmsArticleNew.java一致。
------------------------------------------

String quert= "select o,a from PubArticleOperation o,CmsArticle a where o.flag='1' " +
"and a.articleId=o.docid and o.rootid in ('1')";

pageNo=1
pageSize=100
public static List find(String query, int pageNo, int pageSize) throws DAOException {
Session session = SessionManager.getSession();
List list;
try {
Query q = session.createQuery(query);
q.setFirstResult( (pageNo - 1) * pageSize); ////////只有这两行注释了,才有结果集>0
q.setMaxResults(pageSize); ///////////////////只有这两行注释了,才有结果集>0
list = q.list();
}catch (HibernateException he) {
if (log.isErrorEnabled()) {
log.error("Error:find method error!", he);
}
throw new DAOException(he);
}finally {
if (session != null && session.isOpen()) {
SessionManager.closeSession(session);
}
}
return list;
}


得出的结果集合是零,而实际上数据库符合条件的记录是110条,


如果将其:
// q.setFirstResult( (pageNo - 1) * pageSize); ////////只有这两行注释了,才有结果集>0
// q.setMaxResults(pageSize); ///////////////////只有这两行注释了,才有结果集>0
注释了,那么得出的结果集合>0,但不是110条,而是220条(即双倍)。


而问题的根源我发现了,但不知道如何解决。
问题的关键是CmsArticleNew.JAVA继承了CmsArticle.java

如果不是继承,那么得出的结果是正确的,即为110条。
myepoch 2008-06-29
  • 打赏
  • 举报
回复
我的子类CmsArticleNew确实有自己的映射啊
whetu 2008-06-29
  • 打赏
  • 举报
回复
如果按你7楼所说,那就不是分页的问题了,是hibernate影射有问题,子类应该有自己的hibernate影射。
  • 打赏
  • 举报
回复
楼主想分页么


"pageNo - 1"
myepoch 2008-06-29
  • 打赏
  • 举报
回复
我发现一个问题就是CmsArticleNew是继承CmsArticle 的,只要CmsArticleNew继承CmsArticle 就出现结果集合为零,否则如果不继承结果集合就对。
myepoch 2008-06-29
  • 打赏
  • 举报
回复
String sql = "select o,a from PubArticleOperation o,CmsArticle a where o.flag='1' " +
"and a.articleId=o.docid and o.rootid in ('1')";

q.setFirstResult(0);
q.setMaxResults(100);

结果是零。如果注释


//q.setFirstResult(0);
//q.setMaxResults(100);
结果集合就>0
maxel 2008-06-28
  • 打赏
  • 举报
回复
show_sql没用吧,预编译的看不出参数,怀疑是传的参数错误,尤其是pageSize这个东东,怀疑传进去的为0
sd5816690 2008-06-28
  • 打赏
  • 举报
回复
把 show_sql 加上,看看实际SQL代码是什么
老紫竹 2008-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Landor2004 的回复:]
(pageNo - 1) * pageSize debug或者System.out.println跟踪一下, 看看pageNo真是1吗

如果上面真是1,那你加个order by 试试
[/Quote]

打印出来看看吧!我怀疑你的参数传递错误。
Landor2004 2008-06-28
  • 打赏
  • 举报
回复
(pageNo - 1) * pageSize debug或者System.out.println跟踪一下, 看看pageNo真是1吗

如果上面真是1,那你加个order by 试试

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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