void hessianClean(Object obj, Set done) {
private void hessianClean(Object obj, Set done) {
    void hessianClean(Object obj, Set done) {        if (null == obj)            return;        if (done.contains(obj))            return;        done.add(obj);        if (obj instanceof Map) {            Map map = (Map) obj;            for (Iterator i = map.values().iterator(); i.hasNext();) {                Object value = i.next();                hessianClean(value, done);            }        } else if (obj instanceof Set) {            Set set = (Set) obj;            for (Iterator i = set.iterator(); i.hasNext();) {                Object item = i.next();                hessianClean(item, done);            }        } else {            Method[] methods = ReflectionUtils.getGettersAndSetters(obj);            for (int i = 0; i < methods.length; i++) {                Method method = methods[i];                if (method.getName().startsWith("set"))                    continue;                Object result = ReflectionUtils.invokeGetter(obj, method);                if (!Hibernate.isInitialized(result)) {                    Method setter = ReflectionUtils.getSetterForGetter(methods, method);                    if (null == setter) {                        throw new IllegalStateException(                                "No setter for getter; this will explode:"                                        + method);                    }                    ReflectionUtils.setToNull(obj, setter);                } else {                    hessianClean(result, done);                }            }        }    }