不会用某个东西或对其不懂时,往往看到的都是那东西缺点,其实hibernate有很多让业界肯定的亮点。

解决方案 »

  1.   

    不过用 cout(id) 的效率应该比你说的list.size()要高的吧
    用list.size()还是要回数据库重新搜一遍list 的

      

  2.   

    说Hibernate的人有,但理由绝对不是lz说的
      

  3.   

    感觉学了这么多sql到头了一点用都没了,是有点很郁闷的,而且批量操作,要让人气死的,这时还是要用jdbc
      

  4.   

    有人说过:
    Hibernate是一把笨重的宝刀,不是每个人都舞得动的。
    如果舞得动,那的确是把宝刀。
      

  5.   

    hibernate分页,用query.setFirstIndex(),query.setMaxResults()不会用,别瞎鸡巴叫唤
      

  6.   

    Hibernate是一把笨重的宝刀,不是每个人都舞得动的。
    如果舞得动,那的确是把宝刀。
    ==============================
    非常同意
      

  7.   

    Hibernate是牺牲了性能换取可移植
    但是性能的提高取决与你对它的理解程度
    如果你最基本的sql语句不会写,那我相信你写复杂的hql语句也写不出
      

  8.   

    to dreamover(梦醒了〖http://hellfire.cn〗) ( 用query.setFirstIndex(),query.setMaxResults()并不能算出总的记录数!要得到总的记录数,最快的方法还是用count().如果直接用SQL,我可以这样。
    "select count(*) as count from (" + strSQL+ ")"
    这里的strSQL可以是任意的SQL语句,所以通用性很强。而用HSQL就作不到这一点。
      

  9.   

    我们学hibernate并不主要学它的api,而是学它的原理,它对面向对象和RDBMS之间的差异的解决,
    O/R mapping 这种理念你ok了么?
      

  10.   

    所以我说他不好用。什么O/R mapping,其实也就那样,有必要吹得那么神吗????
      

  11.   

    哈哈,那直接在JSP页面里写算了,struts和spring都不用了
      

  12.   

    public class PageUtil implements Page
    {
        public static final int PAGE_SIZE = 15;//每页多少行
        
        private List elements;    private int  pageSize;    private int  pageNumber;    private int  totalElements = 0;    /**
         * 基于Hibernate的Query数据的分页处理
         * @param query
         * @param pageNumber 第几页
         * @param pageSize 每页几行
         */
        public PageUtil(Query query, int pageNumber, int pageSize)
        {
            this.pageNumber = pageNumber;
            this.pageSize = pageSize;
            try
            {
                ScrollableResults scrollableResults = query.scroll();
                //get total
                scrollableResults.last();
                this.totalElements = scrollableResults.getRowNumber() + 1;
                if (Integer.MAX_VALUE == this.pageNumber
                        || this.pageNumber > getLastPageNumber()) //last page
                {
                    this.pageNumber = getLastPageNumber();
                }
                elements = query.setFirstResult(
                        (this.pageNumber - 1) * this.pageSize).setMaxResults(
                        this.pageSize).list();
            }
            catch (HibernateException e)
            {
                throw new RuntimeException(e);
            }
        }    public boolean isFirstPage()
        {
            return getThisPageNumber() == 1;
        }    public boolean isLastPage()
        {
            return getThisPageNumber() >= getLastPageNumber();
        }    public boolean hasNextPage()
        {
            return getLastPageNumber() > getThisPageNumber();
        }    public boolean hasPreviousPage()
        {
            return getThisPageNumber() > 1;
        }    public int getLastPageNumber()
        {
            return totalElements % this.pageSize == 0 ? totalElements
                    / this.pageSize : (totalElements / this.pageSize) + 1;
        }    /**
         * 返回List类型数据
         *
         * @return List
         */
        public Object getThisPageElements()
        {
            return elements;
        }
        /**
         * 返回总记录数
         * @return int
         */
        public int getTotalNumberOfElements()
        {
            return totalElements;
        }    public int getThisPageFirstElementNumber()
        {
            return (getThisPageNumber() - 1) * getPageSize() + 1;
        }    public int getThisPageLastElementNumber()
        {
            int fullPage = getThisPageFirstElementNumber() + getPageSize() - 1;
            return getTotalNumberOfElements() < fullPage ? getTotalNumberOfElements()
                    : fullPage;
        }    public int getNextPageNumber()
        {
            return getThisPageNumber() + 1;
        }    public int getPreviousPageNumber()
        {
            return getThisPageNumber() - 1;
        }    public int getPageSize()
        {
            return pageSize;
        }    public int getThisPageNumber()
        {
            return pageNumber;
        }
    }
    无聊的时候写的,小ha的分页……设置成懒惰查询……自己研究研究小ha的源代码再来牢骚吧~兄弟
    ps:实现接口是hibernate官方提供的,可以在官网上看见
      

  13.   

    int page = 1,pageSize = 20;
    int resultCount;hql:hql = "from model.User";Object obj = session.createQuery("select count(*) " + hql).uniqueResult();
    resultCount = Integer.parseInt(obj.toString());List results = session.createQuery(hql)
    .setFirstResult(pageSize*(page-1))
    .setMaxResults(pageSize)
    .list();
    sql:
    sql = "select * from user";int resultCount = jdbc.queryForInt("select count(*) from ("+sql+")");List list = jdbc.queryForList(用page和pageSize构造分页后的sql);你觉得这两个复杂度差别很大么
      

  14.   

    楼主说对了,用hibernate就是要把数据持久分开。但是因为用hibernate而引起了性能问题,那就是你的问题了!没人逼你把hibernate用成蜗牛,不会用就说自己不会用!
      

  15.   

    所以仔细研究hibernate的分页实现,就能发现,他都是用的sql语句优化方式的分页实现……
      

  16.   

    在我看来,用hibernate做分页是最简单的。只是你没有掌握原理罢了
      

  17.   

    vista use 2G memr u using vista ?give hibernate some mem