hibernate中,关于类继承后,导致分页取出结果集数量错误的严重问题,请各位帮忙。
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条。
------解决方案--------------------
------解决方案--------------------把你的影射文件完整的贴出来看看吧。
你说:
CmsArticleNew继承CmsArticle类,
注意:CmsArticle类仅仅多了一个clob类型的字段而已,其他字段属性与CmsArticleNew.java一致。
也就是说,夫类比子类多一个clob类型的字段?没有说反吗?
------解决方案--------------------q.setFirstResult( (pageNo - 1) * pageSize);
前取到结果了么???
------解决方案--------------------父类比子类多一个属性?