Pergunta

Aqui está o 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();

Ele falha no último assert com

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

Pergunto isso porque eu quero melhorar entidades do Hibernate, mas às vezes ele já retorna reforçada queridos por si só e meu segundo aprimoramento falhar. Como posso evitar isso?

Foi útil?

Solução

Você precisa verificar se sua classe já é reforçada através do método Enhancer.isEnhanced().

Se for, o seu segundo reforço deve ser aplicada a ORIGINAL classe, não a versão já avançado, como você faz no código acima. Você ainda pode agravar os seus acessórios dentro implementação MethodInterceptor.intercept() mas você tem que fazer isso com cuidado.

Outras dicas

Este foi bastante útil para mim, também. Só queria salientar que chamar getSuperclass () até a cadeia e verificar Enhancer.isEnhanced () para cada deve localizar a superclasse adequada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top