Frage

Hier ist der Code:

    Patient patient = factory.createPatient();           

    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(patient.getClass());
    enhancer.setCallback(new DefaultMethodInterceptor(patient));
    patient = (Patient) enhancer.create();

    assertThat(patient.getFirstName()).isNotNull();


    Enhancer enhancer2 = new Enhancer();
    enhancer2.setSuperclass(patient.getClass());
    enhancer2.setCallback(new DefaultMethodInterceptor(patient));
    patient = (Patient) enhancer2.create();

    assertThat(patient.getFirstName()).isNotNull();

Es ist immer am letzten assert mit

net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
...
Caused by: java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file my/package/entity/Patient$$EnhancerByCGLIB$$ca1e6685$$EnhancerByCGLIB$$f52743be

Ich frage das, weil ich Hibernate Entitäten verbessern möchten, aber manchmal gibt sie bereits verstärkt diejenigen von selbst und meine zweite Erweiterung fehlschlägt. Wie kann ich vermeiden das?

War es hilfreich?

Lösung

Sie müssen prüfen, ob Ihre Klasse bereits über Enhancer.isEnhanced() Verfahren verbessert wird.

Wenn es ist, Ihre zweite Erweiterung soll angewandt werden Original Klasse, nicht die bereits erweiterte Version wie Sie in dem obigen Code zu tun. Sie können noch Ihre Erweiterungen innerhalb MethodInterceptor.intercept() Implementierung Verbindung, aber Sie müssen das tun mit Vorsicht.

Andere Tipps

Das war sehr hilfreich für mich, wie gut. Ich wollte nur, dass getSuperclass Aufruf darauf hin () auf die Kette und Überprüfung Enhancer.isEnhanced () für jeden sollte die richtige Super finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top