复杂视图的hibernate的处理

1、来看一下需要的视图效果(view.png)
2、视图所涉及的对象以及数据量:
     data info 1来自CObject
     data info 2来自BObject
     data info 3来自AObject
     data info 4来自BObject
就目前的数据情况来看:BObject对应的b表和AObject对应的a表数据量都非常的大(百万行以上,预计会达到1000万行左右)
3、AObject所映射的表是一个关联表:AObject<id:bid:cid:did:rid:data>
4、以前系统对视图的处理方式为:
DAO层:

java 代码
  1. List<viewdata> getViewData(String dId,int start,int count){   
  2.    //do associate sql query   
  3.    return query.list();   
  4. }   

处理的时候直接使用HQL实现,语句为:

 

  1. select c.datainfo1,b.datainfo2,b.datainfo4,a.datainfo3,a.bId from CObject c,   
  2. BObject b,AObject a where a.dId =? and a.bId = b.id and a.cId = c.id;  

service层:

java 代码
  1. Page genViewData(String dId,int start,int count){   
  2.    Iterator itr = dao.getViewData(dId,start,count+start).iterator();   
  3.    long totalCount = dao.getViewDataCounts(dId);   
  4.    return PageUtil.getPage(itr, start, count, totalCount, log);   
  5. }  
因为表的数据量比较大的缘故现改为直接通过使用getById来进行直接查询,修改后的结构大概为:
DAO层:添加getAObjectById方法,去掉getViewData方法,如下
   
public List<aobject> getAObjectByDId(String dId,int start,int count){        //do query by id  select a from AObject a where a.dId =?       return query.list();    }  
service层:
java 代码
  1. Page getViewData(String dId,int start,int count){   
  2.     List<aobject> a= dao.getAObjectByDId(dId,start,count+start);   
  3.     Iterator it = a.iterator();   
  4.     List<viewdata> res = new ArrayList<viewdata>();   
  5.     while(it.hasNext()){   
  6.          ViewData vo = new ViewData();   
  7.          AObject ao = (AObject)it.next();   
  8.          BObject bo = dao1.getBObjectById(ao.getBId());   
  9.          CObject co = dao.getCObjectById(ao.getCId());   
  10.          //vo.setXXX   
  11.          res.add(vo)   
  12.     }   
  13.    Iterator itr = res.iterator();   
  14.    long totalCount = dao.getViewDataCounts(dId);   
  15.    return PageUtil.getPage(itr, start, count, totalCount, log);   
  16. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值