2014-02-14 2 views
2

Я пытаюсь сопоставить DTO с его коллегой, объектом Hibernate. Я загружаю объект из сеанса Hibernate и сразу выполняю сопоставление.Отображение Orika для исключения объекта Hibernate исключает

Это исключение, которое я получаю:

javassist.NotFoundException: my.pkg.MyEntity$$EnhancerByCGLIB$$a7950497 
    at javassist.ClassPool.get(ClassPool.java:436) 
    at ma.glasnost.orika.impl.generator.JavassistCompilerStrategy.assureTypeIsAccessible(JavassistCompilerStrategy.java:181) 
    at ma.glasnost.orika.impl.generator.MapperGenerator.build(MapperGenerator.java:56) 
    at ma.glasnost.orika.impl.DefaultMapperFactory.buildMapper(DefaultMapperFactory.java:1057) 
    at ma.glasnost.orika.impl.DefaultMapperFactory.lookupMapper(DefaultMapperFactory.java:599) 
    at ma.glasnost.orika.impl.DefaultMapperFactory.lookupMapper(DefaultMapperFactory.java:566) 
    at ma.glasnost.orika.impl.MapperFacadeImpl.resolveMapper(MapperFacadeImpl.java:516) 
    at ma.glasnost.orika.impl.MapperFacadeImpl.resolveMappingStrategy(MapperFacadeImpl.java:199) 
    at ma.glasnost.orika.impl.MapperFacadeImpl.map(MapperFacadeImpl.java:337) 
    at ma.glasnost.orika.impl.MapperFacadeImpl.map(MapperFacadeImpl.java:357) 
    at ma.glasnost.orika.impl.ConfigurableMapper.map(ConfigurableMapper.java:148) 

Это с HibernateUnenhanceStrategy настроен на моем заводе строитель, это то, что мой Mapper, как выглядит:

public class MyMapper extends ConfigurableMapper 
{ 
    @Override 
    protected void configureFactoryBuilder(DefaultMapperFactory.Builder factoryBuilder) 
    { 
     factoryBuilder.compilerStrategy(new JavassistCompilerStrategy()); 
     factoryBuilder.unenhanceStrategy(new HibernateUnenhanceStrategy()); 
    } 

    @Override 
    protected void configure(MapperFactory factory) 
    { 
     factory.classMap(MyEntity.class, MyDTO.class); 
    } 
} 

Мой обходной путь прямо сейчас заключается в том, что я сам не должен обладать сущностью, между загрузкой из сеанса и отображением с помощью Orika, но я действительно не хочу быть настолько явным. Как я могу заставить это работать?

+0

какую версия Hibernate/Orika вы используете? –

+0

Hibernate 3.2.7 и Orika 1.4.3 – verhage

+0

@verhage: Вы нашли подходящее решение проблемы в то же время? Я испытываю ту же проблему, и это сводит меня с ума (Hibernate 4.3.10, Orika 1.4.6). –

ответ

1

Хотя вопрос довольно старый, вот мое решение в случае, если кто-то там столкнулся с той же проблемой.

Кажется, что HibernateUnenhancerStrategy не применяется к объекту назначения (прокси).

Однако есть простой способ обхода проблемы. MapperFacade показывает переопределенная карту() метод позволяет Thats для передачи типа назначения:

<S, D> void map(S sourceObject, D destinationObject, Type<S> sourceType, Type<D> destinationType); 

Так что ваш вызов будет выглядеть примерно так:

mapperFacade.map(myDto, myProxiedEntity, 
      null, TypeFactory.valueOf(MyEntity.class)); 
Смежные вопросы