// 关于merge() attachDirty() attachClean()三种方法下面做一个简单的介绍   
/**  
* 将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象。  
* 如果该session中没有关联的持久化对象,加载一个,如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。  
*/  
public CodeDepts merge(Usertable detachedInstance) {   
    log.debug("merging Usertable instance");   
    try {   
        Usertable result = (Usertable) getSession()   
            .merge(detachedInstance);   
        log.debug("merge successful");   
        return result;   
    } catch (RuntimeException re) {   
        log.error("merge failed", re);   
        throw re;   
    }   
}   
  
/**  
* 将传入的对象持久化并保存。  
* 如果对象未保存(Transient状态),调用save方法保存。如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。  
*/  
public void attachDirty(Usertable instance) {   
     log.debug("attaching dirty Usertable instance");   
    try {   
        getSession().saveOrUpdate(instance);   
        log.debug("attach successful");   
    } catch (RuntimeException re) {   
        log.error("attach failed", re);   
        throw re;   
    }   
}   
  
/**  
* 将传入的对象状态设置为Transient状态  
*/  
public void attachClean(Usertable instance) {   
    log.debug("attaching clean Usertable instance");   
    try {   
        getSession().lock(instance, LockMode.NONE);   
        log.debug("attach successful");   
    } catch (RuntimeException re) {   
        log.error("attach failed", re);   
        throw re;   
    }   
}