2017-11-14 6 views
2

Ich bin ein Unternehmen das Klonen mit Spring BeanUtils.copyProperties (Quelle, Ziel, schließt) Verfahren und die Frage ist, gibt es eine Methode namens SetHandler das und setzt sie im Grunde alle aufgerufen wird, die Eigenschaften, die ich während der Kopie in meiner Ausschlussliste festgelegt habe. Wenn ich den Handler ausschließe, erhalte ich eine Ausnahme, um das neue Objekt zu speichern.sicher eine Hibernate Frühling JPA-Entität klonen - Javassist

Ich möchte nur ein Klon eines Hibernate Objekt zu tun, ohne 10 Eigenschaften und das neue Objekt zu speichern.

public static <T> T cloneClass(T existing, Class<? extends Annotation> ignores) 
     throws Exception { 

    final Collection<String> excludes = new ArrayList<>(); 

    Set<Method> annotated = getMethodsWithAnnotation(ignores, existing.getClass()); 

    for (Method method : annotated) { 

     if (!method.getName().startsWith("get") && !method.getName().startsWith("is")) 
      continue; 
     String exclude = ReflectUtil.decap(method.getName()); 
     log.debug("Exclude from copy: " + exclude); 
     excludes.add(exclude); 
    } 

    excludes.add("handler"); <-- must have this 
    Object newInstance = existing.getClass().newInstance(); 
    String[] excludeArray = excludes.toArray(new String[excludes.size()]); 

    BeanUtils.copyProperties(existing, newInstance, excludeArray); 

    return (T) newInstance; 
} 

Wenn ich nicht enthalten

excludes.add("handler"); <-- must have this 

Was dann passiert, ist das Zielobjekt alle Eigenschaften von der Quelle erhält und im Grunde macht meine Ausschlussliste nutzlos, aber wenn ich versuche, das Objekt zu speichern , Hibernate löst einen internen Hibernate-Fehler aus.

Gibt es einen einfacheren Weg, um ein Objekt zu klonen als das, was ich tue?

+0

welche Ausnahme werfen winter? –

+0

Eigentlich macht nichts der Fehler ... .Es kein Fehler ist ... Die geklonte Instanz kommt gerade aus genau das gleiche wie das Original. Reflection wird zu setHandler und das gesamte Objekt wird aus irgendeinem Grund gefüllt. – chrislhardin

Antwort

Verwandte Themen