NutzCN Logo
问答 如何在一个线程中copy一个cnd对象
发布于 2704天前 作者 蛋蛋的忧伤 1901 次浏览 复制 上一个帖子 下一个帖子
标签:

还是那个问题,我想复制一个cnd对象,在原来cnd对象的基础上加条件...

18 回复

为啥要复制cnd实例?

我要根据cnd来查询一条,然后再在这个cnd基础上加其他条件,原来的cnd是基础

那还不如做个工厂方法,返回个Cnd

......不是这个意思,我就有一个业务是需要这样的条件来查询,前他都用不到....
开始构建一个cnd条件,然后执行一条查询,然后再在原来的cnd基础上加上各种参数,执行多条查询

我直接扔代码了,

 @At
    @GET
    public Object list(){
        Entity<ProductFrequence> entity = dao.getEntity(ProductFrequence.class);  
        Cnd cnd = Ins.searchParams(entity);  //封装参数
        cnd.desc(Product.CREATE_TIME);
        Pager pager = Ins.pager();
        List<ProductFrequence> rows = productFrequenceDao.query(cnd, pager);   //执行一次查询,获取list

        List<SqlExpression> sqlExpressions = cnd.where().cloneExps();    //获取原来Cnd里的条件,出问题了:中间参数是AND,其他都正常,然而导致我的sql是连续的selct... where  and and  ...age=1...
        for(int i=0; i<rows.size(); i++){ 
            SimpleCriteria c3 = Cnd.cri();         
            for(int j=0; j<sqlExpressions.size(); j++){
                c3.where().and(sqlExpressions.get(j));       //获取原来cnd的条件
            }
            c3.where().and(ProductCartfre.PRO_BARCODE, "=", rows.get(i).getPro_barcode());   //加上我的新条件
            ProductCartfre fetch = dao.fetch(ProductCartfre.class, c3);      //查询..
            if(fetch!=null){
                rows.get(i).setCarts(fetch.getFrequence());
            }
        }
        pager.setRecordCount(productFrequenceDao.count(cnd));
        return Outs.listInfo(rows, pager);
    }

为什么不能有
cnd.where().add(Cnd cnd);
直接将一个cnd里的条件添加到一个新的cnd呢?

为啥不用clone呢?

Cnd cnd = Cnd.where("name", "=", "wendal").and("age", "=", 18);
Cnd cnd2 = Cnd.where(cnd.where().clone());

我去....
我的cnd里没有clone方法,只有
Cnd cnd2 = Cnd.where(cnd.where().cloneExps())

换最新快照版嘛

不会影响原来的吧???

项目太大,换不动啊....有没有其他办法....

@qq_32b899df 自己改一下那个类

话说, 不需要clone也行吧,只要原始的Cnd不再使用

Cnd cnd = Cnd.where("name", "=", "wendal").and("age", "=", 18);
Cnd cnd2 = Cnd.where(cnd.where());
Cnd cnd3 = Cnd.where(cnd.where());
cnd = null; //防止误用

大叔呀,Cnd cnd2 = Cnd.where(cnd.where()); 这个方式只能复制where部分,我想全部 都复制一个新的应该怎么办? 至少应该包含order by 吧

添加回复
请先登陆
回到顶部