public void abrirRecursivo() throws Exception { this.abrirEstado(); Field[] fillos = this.getClass().getFields(); ArrayList<Field> aFields = new ArrayList<Field>(Arrays.asList(fillos)); for (Field field : aFields) { if (!field.getName().equals("id") && !field.getName().equals("willBeSaved")) { if ("Set".equals(field.getType().getSimpleName())) { Object value = new PropertyDescriptor(field.getName(), this.getClass()).getReadMethod().invoke(this); Class<? extends Set> theClass = Class.forName("java.util.Set").asSubclass(Set.class); Set objSet = theClass.cast(value); for (Object obj : objSet) { if (obj instanceof models.UnionSecureModel) { UnionSecureModel u = (UnionSecureModel) obj; u.abrirEstado(); u.abrirRecursivo(); } } } else { Object obj = new PropertyDescriptor(field.getName(), this.getClass()).getReadMethod().invoke(this); if (obj instanceof models.UnionSecureModel) { UnionSecureModel u = (UnionSecureModel) obj; u.abrirEstado(); u.abrirRecursivo(); } } } } }