NutzCN Logo
问答 用Lang.equals比较数据库的实体类
发布于 2703天前 作者 老司机 1679 次浏览 复制 上一个帖子 下一个帖子
标签:

如题,我是用

Lang.equals(Lang.obj2nutmap(POJO1), Lang.obj2nutmap(POJO2))

比较两个实例的,两个实例都是从数据库取出来的
从数据库取出的POJO都是带id的,所以肯定是false,就算在比较前把POJO的id都设为0,也没用,因为我先要用

dao.fetchLinks(POJO, null);

去填充关联字段,这样,导致关联字段递归比较的时候又遇到id不同的情况,如果一个个去把id都设为0,那样工作量太大了,有木有什么解决办法能使得快速比较数据库中两条记录是否相等?

7 回复

用Lang.filter把不需要比较的属性过滤一下

@wendal 主要是这个POJO里面有@Many的关联字段,我还得去吧,关联字段的每一个POJO取出来再过滤,而且他有五六个@Many字段,有个@Many字段下面还有一层@Many,这过滤下来要到猴年马月啊,而且每个关联字段名还不样,不能递归去过滤……

那到底是比较对象呢,还是比较数据库记录是否相等?或者说,你这是为了做什么功能

@wendal 实际是比较对象,需求是这样的,现抓的服务器的数据,更数据库里最新的一条记录比较是否有差别
我建表的时候把数据作(info)为实体类建表,然后一台服务器下面有复数个CPU,内存和硬盘,就会@ManyCPU,@ManyDisk,这样我比较info的时候,不仅要不info实例化,还要把对应的复数个CPU信息实例化,就算我去掉info实例的id和time去掉比较两个info,但是在比较他们下面的cpu时候又会遇到这样的问题,难道要一个一个去掉id?

就是不比较关联关系和主键?

@wendal 不关主键,和时间这些必须不同的字段,只关注值

结合一下dao,单纯对映射属性进行取值对比

        Entity<BoxProfile> en = dao.getEntity(BoxProfile.class);
        for (MappingField mf : en.getMappingFields()) {
            if (mf.isId() || mf.isName())
                continue;
            if (!Lang.equals(mf.getValue(objA), mf.getValue(objB)))
                return false;
        }
        return true;

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