要擅于利用对象之间映射的集合去查与其关联的对象,而不是直接在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);
}
}
}