NutzCN Logo
问答 一个pojo对象同时声明@Id @Name, 通过@Name字段更新对象的时候更新不成功,有没有什么好的解决方法?
发布于 2379天前 作者 pontali 1768 次浏览 复制 上一个帖子 下一个帖子
标签:

一个pojo对象同时声明@Id @Name, 通过@Name字段更新对象的时候更新不成功,有没有什么好的解决方法?

15 回复

id没有值??

@wendal 是的,Id没有值的情况下。

哦, 那就转成Chain来更新吧

@wendal updateIgnoreNull . 这个方法用不了哦。

先转map,去null,然后转Chain吧, 只能绕一下了

这个报个 issue 吧

来自美丽的 NutzCN

@wendal @zozoh
我自己封装了一下update 和 updateIgnoreNull 这样写应该没问题吧

    @Override
    public int update(BaseModel obj) {
        //如果id为空,无法更新。
        if(Strings.isBlank(obj.getId())){
            return 0;
        }else{
            //忽略id
            FieldMatcher fieldMatcher = FieldMatcher.create(true);
            //从对象创建chain
            Chain chain = Chain.from(obj,fieldMatcher);
            //默认使用uuid作为查询条件
            Cnd cnd = Cnd.where("id","=",obj.getId());
            return this.dao().update(obj.getClass(),chain,cnd);
        }
    }
    /**
     * 更新数据忽略值为null的字段
     *
     * @param obj
     * @return
     */
    @Override
    public int updateIgnoreNull(BaseModel obj) {
        if(Strings.isBlank(obj.getId())){
            return 0;
        }else{
            //忽略id
            FieldMatcher fieldMatcher = FieldMatcher.create(true);
            //忽略null
            fieldMatcher.setIgnoreNull(true);
            //从对象创建chain
            Chain chain = Chain.from(obj,fieldMatcher);
            //默认使用uuid作为查询条件
            Cnd cnd = Cnd.where("id","=",obj.getId());
            return this.dao().update(obj.getClass(),chain,cnd);
        }
    }

@wendal @zozoh 目前这样用没发现问题

@Id的字段是long还是Long呢?

只是不明白,为啥用名字,而不是 ID, 你更新前没有从数据库里先 fetch 一下吗?

来自美丽的 NutzCN

@zozoh @wendal 我的用意是想在一个表里,既有自增长ID,又有String类型的uuid 。所以就这样了。

@wendal @zozoh 有没有更好的方案?请教一下!

等晚上我改改

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