Pregunta

Aquí está el código:

    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();

Se produce un error en la última aserción con

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

Lo pregunto porque quiero mejorar entidades de Hibernate, pero a veces ya Devuelve los aumenté por sí mismo y no logra mi segunda mejora. ¿Cómo puedo evitar esto?

¿Fue útil?

Solución

Es necesario comprobar si su clase ya se ve reforzada a través del método Enhancer.isEnhanced().

Si es así, su segunda mejora se debe aplicar a ORIGINAL clase, no la versión mejorada ya como lo hace en el código de seguridad. Todavía se puede agravar sus mejoras dentro de la aplicación MethodInterceptor.intercept() pero hay que hacerlo con cuidado.

Otros consejos

Esto fue bastante útil para mí, también. Sólo quería señalar que llamar getSuperclass () en la cadena y comprobar Enhancer.isEnhanced () para cada uno debe localizar la superclase adecuada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top