<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Rory's Blog
    Happy study,Happy work,Happy life
    posts - 22,  comments - 46,  trackbacks - 0
    今天把myblog用sql server部署了一下,可是發(fā)現(xiàn)分頁(yè)查詢的時(shí)候出現(xiàn)錯(cuò)誤,看控制臺(tái)報(bào)錯(cuò)說(shuō)語(yǔ)句有錯(cuò),由來(lái)發(fā)現(xiàn)分頁(yè)的時(shí)候先查詢總記錄數(shù)目的那條語(yǔ)句出錯(cuò)了
    select?count(*)?as?y0_?from?myblog_Blog?this_?inner?join?myblog_Blog_Category?categories3_?on?this_.id=categories3_.blogId?inner?join?myblog_Category?category1_?on?categories3_.categoryId=category1_.id?where?category1_.id=??order?by?this_.postTime?desc
    ????? 原來(lái)開(kāi)發(fā)的時(shí)候我是用的mysql,沒(méi)有任何問(wèn)題。原因就在最后面的order by 語(yǔ)句,sql server 在select count(*)里面不能用 order by。然后跟蹤代碼發(fā)現(xiàn):
    ????public?PaginationSupport?getBlogsByCategoryByPage(final?String?categoryId,?final?int?startIndex,?final?int?pageSize)?{
    ????????
    return?(PaginationSupport)?getHibernateTemplate().execute(new?HibernateCallback()?{
    ????????????
    public?Object?doInHibernate(Session?session)?throws?HibernateException?{
    ????????????????Criteria?criteria?
    =?session.createCriteria(Blog.class);
    ????????????????Criteria?cateCriteria?
    =?criteria.createCriteria("categories");
    ????????????????cateCriteria.add(Expression.eq(
    "id",categoryId));
    ????????????????criteria.addOrder(Order.desc(
    "postTime"));
    ????????????????
    int?totalCount?=?((Integer)?criteria.setProjection(Projections.rowCount())
    ????????????????????????.uniqueResult()).intValue();
    ????????????????criteria.setProjection(
    null);
    ????????????????
    ????????????????List?items?
    =?criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
    ????????????????List?blogs?
    =?new?ArrayList();
    ????????????????
    for(Iterator?ite?=?items.iterator();?ite.hasNext();)?{
    ????????????????????Object[]?objs?
    =?(Object[])ite.next();
    ????????????????????blogs.add(objs[
    1]);
    ????????????????}
    ????????????????PaginationSupport?ps?
    =?new?PaginationSupport(blogs,?totalCount,?pageSize,?startIndex);
    ????????????????
    return?ps;
    ????????????}
    ????????},?
    true);
    ????}
    原來(lái)問(wèn)題就在Criteria.addOrder(Order.desc("postTime"));這句話的位置上面,int totalCount = ((Integer) criteria.setProjection(Projections.rowCount())
    ??????.uniqueResult()).intValue();
    這句話的時(shí)候就會(huì)生成上面那句話,如果在這之前addOrder就會(huì)出現(xiàn)問(wèn)題,如果你用mysql不會(huì)出現(xiàn)問(wèn)題,如果你用sql server就會(huì)報(bào)錯(cuò)。解決方法就是把a(bǔ)ddOrder語(yǔ)句放到totalCount下面就可以了。
    ????public?PaginationSupport?getBlogsByCategoryByPage(final?String?categoryId,?final?int?startIndex,?final?int?pageSize)?{
    ????????
    return?(PaginationSupport)?getHibernateTemplate().execute(new?HibernateCallback()?{
    ????????????
    public?Object?doInHibernate(Session?session)?throws?HibernateException?{
    ????????????????Criteria?criteria?
    =?session.createCriteria(Blog.class);
    ????????????????Criteria?cateCriteria?
    =?criteria.createCriteria("categories");
    ????????????????cateCriteria.add(Expression.eq(
    "id",categoryId));
    ????????????????
    int?totalCount?=?((Integer)?criteria.setProjection(Projections.rowCount())
    ????????????????????????.uniqueResult()).intValue();
    ????????????????criteria.setProjection(
    null);
    ????????????????
    ????????????????
    /*
    ?????????????????*?Fix?a?bug?,Order?must?add?after?get?the?totalCount,
    ?????????????????*?beacuse?SqlServer?not?support?order?by?in?the?select?count(*).
    ?????????????????
    */
    ????????????????criteria.addOrder(Order.desc(
    "postTime"));
    ????????????????List?items?
    =?criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
    ????????????????List?blogs?
    =?new?ArrayList();
    ????????????????
    for(Iterator?ite?=?items.iterator();?ite.hasNext();)?{
    ????????????????????Object[]?objs?
    =?(Object[])ite.next();
    ????????????????????blogs.add(objs[
    1]);
    ????????????????}
    ????????????????PaginationSupport?ps?
    =?new?PaginationSupport(blogs,?totalCount,?pageSize,?startIndex);
    ????????????????
    return?ps;
    ????????????}
    ????????},?
    true);
    ????}

    這樣生成的sql語(yǔ)句就是這樣的。
    select?count(*)?as?y0_?from?myblog_Blog?this_?inner?join?myblog_Blog_Category?categories3_?on?this_.id=categories3_.blogId?inner?join?myblog_Category?category1_?on?categories3_.categoryId=category1_.id?where?category1_.id=?

    以后大家也要注意了。呵呵。
    posted on 2006-05-21 22:49 莫多 閱讀(6440) 評(píng)論(4)  編輯  收藏 所屬分類: SpringHibernate

    FeedBack:
    # re: 今天發(fā)現(xiàn)一個(gè)hibernate的bug,或者說(shuō)一個(gè)應(yīng)該注意的地方比較合適
    2006-05-30 08:22 | xiaofei_hu
    有沒(méi)有人給個(gè)合理的理由
    佩服你的debug能力。  回復(fù)  更多評(píng)論
      
    # re: 今天發(fā)現(xiàn)一個(gè)hibernate的bug,或者說(shuō)一個(gè)應(yīng)該注意的地方比較合適
    2006-05-30 09:43 | 莫多
    這個(gè)就是因?yàn)镠ibernate的條件查詢的時(shí)候你可以addOrder()添加很多排序的方式。如果你在addOrder之后取totalcount那樣Hibernate也會(huì)把order by語(yǔ)句拼接到你的select count(*)語(yǔ)句后面。然而有的數(shù)據(jù)庫(kù)是不支持的。eg(SqlServer)所以就會(huì)出錯(cuò)了。請(qǐng)看我的最新文章。  回復(fù)  更多評(píng)論
      
    # re: 今天發(fā)現(xiàn)一個(gè)hibernate的bug,或者說(shuō)一個(gè)應(yīng)該注意的地方比較合適
    2006-05-30 11:25 | xiaofei_hu
    明白明白了.  回復(fù)  更多評(píng)論
      
    # re: 今天發(fā)現(xiàn)一個(gè)hibernate的bug,或者說(shuō)一個(gè)應(yīng)該注意的地方比較合適
    2011-08-10 19:02 | 鐵皮鬼
    不是hibernate的bug,這個(gè)是數(shù)據(jù)庫(kù)引起的,oracle就沒(méi)有這個(gè)問(wèn)題。
    postgresql也存在同樣的問(wèn)題。
    不過(guò)你的解決方法很不錯(cuò)。
    但有個(gè)小問(wèn)題,參看 http://blog.csdn.net/ironskinspirit/article/details/6676740
      回復(fù)  更多評(píng)論
      

    <2011年8月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(1)

    隨筆分類(27)

    隨筆檔案(22)

    Friends

    搜索

    •  

    積分與排名

    • 積分 - 62221
    • 排名 - 845

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲av永久无码精品三区在线4| 国产成人精品123区免费视频| 亚洲精品无码av天堂| 亚洲人成电影网站色www| 182tv免费观看在线视频| 亚洲国产一区二区三区青草影视| 国产一二三四区乱码免费| 亚洲桃色AV无码| 热99RE久久精品这里都是精品免费 | 亚洲乱码国产一区三区| 四虎永久免费地址在线网站 | 亚洲的天堂av无码| 高清一区二区三区免费视频| 亚洲AV成人潮喷综合网| 美女露100%胸无遮挡免费观看| 一二三四在线观看免费高清中文在线观看 | 一级一看免费完整版毛片| 中国一级毛片视频免费看| 免费在线观看毛片| 在线观看亚洲视频| 国产精品成人免费综合| 亚洲а∨天堂久久精品9966| 青青在线久青草免费观看| 亚洲1234区乱码| 久久国内免费视频| 亚洲国产成人AV在线播放| 亚洲精品V天堂中文字幕| 卡1卡2卡3卡4卡5免费视频 | 亚洲AV成人潮喷综合网| 成人a毛片视频免费看| 亚洲片一区二区三区| 中国毛片免费观看| 亚洲av网址在线观看| 无码免费一区二区三区免费播放 | 亚洲欧洲日韩国产| 成人免费视频88| 精品亚洲成a人在线观看| 亚洲第一视频在线观看免费| 一本到卡二卡三卡免费高| 精品国产亚洲一区二区在线观看| 福利免费在线观看|