NutzCN Logo
问答 query查询多层次一对多关系,具体要怎么实现
发布于 2235天前 作者 wx_7lk4hgerl7vdvt2aav1n 1944 次浏览 复制 上一个帖子 下一个帖子
标签:

query查询多层次一对多关系, 再将首层SaleActivityBo和第二层SaleContentBo、EffectiveAreaBo查出来之后,第三层的SaleRuleBo是否必须for循环第二层的saleContentBoList然后才能查询出来第三层的值,有没有其他的方式,for数据库效率太低

  public void aa() {
        List<SaleActivityBo> saleActivityBoList = dao().query(SaleActivityBo.class, null);
        System.out.println(saleActivityBoList);
        saleActivityBoList = dao().fetchLinks(saleActivityBoList, null);
        System.out.println(saleActivityBoList);
        for (SaleActivityBo saleActivityBo : saleActivityBoList) {
            List<SaleContentBo> saleContentBoList = saleActivityBo.getSaleContentBoList();
            saleContentBoList = dao().fetchLinks(saleContentBoList, null);
        }
        System.out.println(saleActivityBoList);
    }
public class SaleActivityBo extends SaleActivity {
    private EnumSaleActivityStatusPhase saleActivityStatusPhase;

    /**
     * 生效区域的集合
     */
    @Many(field = "saleActivityId")
    private List<EffectiveAreaBo> effectiveAreaBoList;


    /**
     * 优惠内容的集合
     */
    @Many(field = "saleActivityId")
    private List<SaleContentBo> saleContentBoList;

}
public class SaleContentBo extends SaleContent {

    /**
     * 保存营销规则的集合
     */
    @Many(field = "saleContentId")
    private List<SaleRuleBo> saleRuleBoList;
}

3 回复

可以考虑用dao.queryByJoin简化第一层的查询,但多层次的查询, 还是避免不了的

就是说第三层的SaleRuleBo如果用这种方法的话 还是需要for循环saleContentBoList集合才行吗

稍微优化了下,这样的话会好很多

  public void aa() {
        List<SaleActivityBo> saleActivityBoList = dao().queryByJoin(SaleActivityBo.class, null, null);


        List<SaleContentBo> allSaleContentBoList = new ArrayList<>();
        List<SaleContentBo> saleContentBoList = null;
        for (SaleActivityBo saleActivityBo : saleActivityBoList) {
            saleContentBoList = saleActivityBo.getSaleContentBoList();
            allSaleContentBoList.addAll(saleContentBoList);
        }
        allSaleContentBoList = dao().fetchLinks(allSaleContentBoList, null);
        System.out.println(saleActivityBoList);
    }
添加回复
请先登陆
回到顶部