猿问

如何提取隐藏在HibernateProxy后面的原始实体类?

我为我的应用程序创建了一个 Mapper 类,它提供了一个简单的使用界面:


Destination destination = mapper.map(sourceObject, Destination.class);


//or just


mapper.map(sourceObject, destination);

Mapper 实例包含由 ClassPair 映射的转换器的映射:


class ClassPair() {


    private Class sourceType;

    private Class destinationType;

    ...

}


class Mapper {


    private Map<ClassPair, Converter> converters;

    ...

}

问题是,当我尝试将持久实体转换为另一种类型时,我的映射器因 NPE 失败。这是因为持久化实体的类型不是该实体的原始类,而是生成的 HibernateProxy 实现。


我尝试过使用Hibernate.unproxy()方法,但它在所有应用程序中都占有一席之地。它确实有效,但是我认为这是一个非常糟糕的做法。


因此,我需要以某种方式确定实体的原始类。


慕妹3242003
浏览 108回答 1
1回答

守着一只汪

每个HibernateProxy实例都可以访问其底层延迟初始化处理程序,该处理程序具有所需的信息。if&nbsp;(value&nbsp;instanceof&nbsp;HibernateProxy)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((HibernateProxy)&nbsp;value).getHibernateLazyInitializer().getPersistentClass(); }
随时随地看视频慕课网APP

相关分类

Java
我要回答