hql查询技巧

要擅于利用对象之间映射的集合去查与其关联的对象,而不是直接在dao层重新写查询的方法,其实,hibernate正是对复杂查询的一种解放,既然有现成的东西,何必再去闭门造车,而且造出来的还是个旧车。

查询给定目录id下的所有试卷:

public Pagination getPage(EmPaperCatalogDef pcdId, String sddId, int pageNo, int pageSize) {
        List<EmPaper> list = new ArrayList<EmPaper>();
        getAllSubPaper(list, pcdId);
        if(list.size() > 0){
            List<Long> ids = new ArrayList<Long>();
            for(EmPaper ep : list){
                ids.add(ep.getTpId());
            }
            return emPaperDao.getSubPapers(ids, sddId, pageNo, pageSize);
        }
        return new Pagination(1, 0, 0, new ArrayList<EmPaper>(0));
    }
    
    public void getAllSubPaper(List<EmPaper> list, EmPaperCatalogDef paperCatalogDef){
        if(paperCatalogDef.getEmPapers()!=null && paperCatalogDef.getEmPapers().size()>0){
            list.addAll(paperCatalogDef.getEmPapers());
        }
        if(paperCatalogDef.getEmPaperCatalogDefs()!= null && paperCatalogDef.getEmPaperCatalogDefs().size()>0){
            for(EmPaperCatalogDef cata : paperCatalogDef.getEmPaperCatalogDefs()){
                getAllSubPaper(list, cata);
            }
        }
    }

posted on 2015-04-24 09:22  Simle  阅读(131)  评论(0编辑  收藏  举报