当前位置:网站首页 / Java代码 / 正文

使用反射解决Hibernate保存丢字段的问题

时间:2016年07月26日 | 作者 : admin | 分类 : Java代码 | 浏览: 671次 | 评论 0

第一步

package com.lightsaber.distri.product.web.product;

import java.lang.reflect.Field;
public class ObjectModel<T> {
    //将source的字段的有的值增加到target上
    //source是页面传过来的  target是从数据库取的 
    public T copyObject(T source,T target){
        try {
            Class sourceClass=source.getClass();
            Class sourceSuperClass=sourceClass.getSuperclass();
            Field[] sourceFields = sourceClass.getDeclaredFields();
            Field[] sourceSuperFields = sourceSuperClass.getDeclaredFields();
            Class targetClass=target.getClass();
            Class targetSuperClass=targetClass.getSuperclass();
            Field[] targetFields = targetClass.getDeclaredFields();
            Field[] targetSuperFields = targetSuperClass.getDeclaredFields();
            for(Field ft:targetFields){
                ft.setAccessible(true);
                if(!ft.getName().equals("serialVersionUID")&&!ft.getName().equals("ID")&&!ft.getName().equals("VERSION")){
                    for(Field fs:sourceFields){
                        fs.setAccessible(true);
                        if(fs.getName().equals(ft.getName())&& fs.get(source) !=null &&!"".equals(fs.get(source))){
                            ft.set(target, fs.get(source)); 
                        }
                    } 
                }
            }
            for(Field ft:targetSuperFields){
                ft.setAccessible(true);
                if(!ft.getName().equals("serialVersionUID")&&!ft.getName().equals("ID")&&!ft.getName().equals("VERSION")){
                    for(Field fs:sourceSuperFields){
                        fs.setAccessible(true);
                        if(fs.getName().equals(ft.getName()) && fs.get(source) !=null &&!"".equals(fs.get(source))){
                            ft.set(target, fs.get(source)); 
                        }
                    } 
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    };
}

第二步  使用的时候先查一下

/** 增加 和 修改 */
    public Product update(Product product) {
        Product p = productDao.findOne(product.getId());
        p = new ObjectModel<Product>().copyObject(product, p);
        p = productDao.save(p);
        return p;
    }


猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类