首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate中获取ID的通用步骤

2012-10-26 
Hibernate中获取ID的通用方法论坛中关联的地址:http://www.iteye.com/topic/397854直接上代码比较能说明问

Hibernate中获取ID的通用方法
论坛中关联的地址:
http://www.iteye.com/topic/397854

直接上代码比较能说明问题。
首先是一个工具类SpringContextTool.java,getIdValue方法原本其他工具类中的方法,挪过来放在一起说方便。虽然是JDK 1.5的编程风格,但是主要技巧同样适用于JDK 1.4。

public abstract class BaseModel<E> implements Cloneable, Serializable {            public int hashCode() {        String idStr = SpringContextTool.getIdValue(this);        return idStr == null ? super.hashCode() : idStr.hashCode();    }    public boolean equals(Object other) {        if (other == null) {            return false;        }        if (other == this) {            return true;        }        /*因为字节码增强的关系,getClass()不能用作判断的依据*/        if (getClass().getPackage() != other.getClass().getPackage()) {            return false;        }        if (hashCode() == other.hashCode()) {            return true;        }        return false;    }    /**日志对象*/    protected final Logger log = Logger.getLogger(getClass());            /**覆盖toString方法,ToStringStyle取值为ToStringStyle.SHORT_PREFIX_STYLE     * ,调试的时候注意会自动取所有引用的值,会触发所有的Hibernate的延迟加载,     * 如果遇到性能问题,必须覆盖这个默认的toString方法的实现,或者避免调用这个默认的toString方法。     * @return String     */    public String toString() {        ToStringBuilder tsb = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);        for (Field field : getClass().getDeclaredFields()) {            if (Modifier.isStatic(field.getModifiers())) {                continue;            }            String name = field.getName();            if ("log".equals(name) || "serialVersionUID".equals(name)) {                continue;            }            Object obj = ModelUtils.getProperty(this, name);            if (obj instanceof AbstractPersistentCollection) {                continue;            }            if (obj instanceof Calendar) {                obj = DateTimeUtils.calendar2StrDateTime((Calendar) obj);            }            tsb.append(name, obj);        }        return tsb.toString();    }    /**提供默认的clone方法的实现,不支持深层复制     * @return Object     */    public E clone() {        try {            return (E) super.clone();        } catch (CloneNotSupportedException ex) {            throw new IllegalArgumentException(ex.getMessage());        }    }        /**提供simple的clone方法的实现,不复制Hibernate代理对象     * @return Object     */    public Object cloneSimple() {        Object obj = ModelUtils.newInstance(getClass());        Field[] fields = getClass().getDeclaredFields();        for (int i = 0; i < fields.length; i++) {            if (Modifier.isStatic(fields[i].getModifiers())) {                continue;            }            String name = fields[i].getName();            if ("serialVersionUID".equals(name)) {                continue;            }            Object fieldObj = ModelUtils.getProperty(this, name);            if (fieldObj instanceof AbstractPersistentCollection ||                fieldObj instanceof BaseModel) {                continue;            }            ModelUtils.setProperty(obj, name, fieldObj);        }        return obj;    }}

热点排行