我的父类对象category中包含一个集合set的子对象product..category对象对应的 hbm.xml中对product进行了set映射.hibernate可以延迟检索到多个子对象,但他好像是一次性全部检索出来的.我要分页检索出来 如何处理。我说的是后台基于数据库的分页操作. 

解决方案 »

  1.   

    这个是我定义的Category类:public class Category{
     private Intger id;
     private String name;
     private Set<Product> products=new Hashmap<Product>(); //getter and setter method}
    当然是可以这样在product类的业务逻辑类中定义一个方法,通过传递一个类别对象和分页参数,分页获取该类别下的产品信息/*
      分页查询category类别下的product信息,返回一个包含了分页数据的对象Page
      @param category 产品类别
      @param pageNo 显示的页码
      @param pageSize 页的大小
      @result 查询的该类的第pageNo页的全部数据
    */
    public Page<Product> queryByPage(Category category,pageNo,pageSize);  //调用Query中的分页方法进行分页查询数据如此一来,貌似可以...
    但我在持久化类中定义的 一对多的set映射,利用hibernate的延迟加载来获取的全部的products对象,却还是没有什么效率? 当我的 category关联1000个product对象的时候  即使是延迟加载,那只是加载这个动作是延迟进行的,并不是说明加载的过程是延迟的,有1000个对象他会持续发送1000条 select 数据..
    获取整个数据的过程是全部获取到的。 虽然set中可以设置batch-size  来设置批量抓取的数量 ... 但我感觉很别扭,特别是我需要统计总页数,在前端 jsp 中使用分页标签进行显示数据时候,比较麻烦.....??
      

  2.   


    你可以考虑弄一个div 然后显示集合信息 (通过查询一的一端的信息得到该集合的分页)
      

  3.   


    一般情况下还是用两条SQL来统计,一条SQL查询出某个条件下的所有行数,让后在使用rownum\limit进行查询控制;这里不太明白你要对那些数据进行分页?是category还是查询出来的每个category所包含的product进行分页?同时针对batch-size的大小一般设置为分页大小。