hibernate修改数据库已有的对象【简化操作】

来源:互联网 发布:网络有利还是有害 编辑:程序博客网 时间:2024/05/18 17:41

陈科肇

直接上代码:

/**     * 更新新的数据并并未修改旧的数据     * @param oldEntity 数据库存在的实体     * @param newEntity 更改后的实体     * @throws IllegalAccessException      * @throws IllegalArgumentException      */    public void updateNew(T oldEntity,T newEntity) throws Exception{        Field[] oFields =  oldEntity.getClass().getDeclaredFields();        Field[] nFields = newEntity.getClass().getDeclaredFields();        //将新的值,替换对应旧的值,其它不对应的保持不变        for(int i=0;i<oFields.length;i++){            Field of = oFields[i];            Field nf = nFields[i];            //仅仅针对反射,通过调用Field.setAccessible(true)方法,关闭了对特定的Field实例的访问检查。现在你可以访问它,尽管它是private,或者protected,或者是package scope,即使调用者不在这个范围内。            of.setAccessible(true);            nf.setAccessible(true);            if(of.equals(nf) && nf.get(newEntity)!=null){                of.set(oldEntity, nf.get(newEntity));            }            oFields[i]=of;        }        getCurrentSession().update(oldEntity);    }

调用

/**     * 修改     * @param user 要修改的对象     * @throws Exception      */    public void update(ProductUser user) throws Exception {        //根据id,从数据库中取出实体对象        ProductUser _user = this.getEntityById(user.getUserid());        productUserDao.updateNew(_user,user);    }

说明:有时候,我们要修改数据库中的一个对象,但只修改一个字段,即不完全修改对象的每个对象。也就是说,又想保留不想更改的字段,又想更改想更改的字段。

平常的做法:

/**     * 修改     * @param user     * @throws Exception      */    public void update(ProductUser user) throws Exception {        ProductUser _user = this.getEntityById(user.getUserid());        _user.setUsername(user.getUsername());        _user.setPhonenumber(user.getPhonenumber());        _user.setName(user.getName());        _user.setSex(user.getSex());        productUserDao.update(_user);    }

这样是不是很麻烦的

0 0
原创粉丝点击