小编典典

如何将 Hibernate 代理转换为真实的实体对象

all

在 Hibernate 期间Session,我正在加载一些对象,其中一些由于延迟加载而被加载为代理。一切都好,我不想关闭延迟加载。

但后来我需要通过 RPC 将一些对象(实际上是一个对象)发送到 GWT 客户端。碰巧这个具体的对象是一个代理。所以我需要把它变成一个真实的物体。我在
Hibernate 中找不到像“物化”这样的方法。

如何将某些对象从代理转换为知道它们的类和 ID 的真实?

目前我看到的唯一解决方案是从 Hibernate 的缓存中删除该对象并重新加载它,但由于许多原因,它确实很糟糕。


阅读 57

收藏
2022-08-01

共1个答案

小编典典

这是我正在使用的一种方法。

public static <T> T initializeAndUnproxy(T entity) {
    if (entity == null) {
        throw new 
           NullPointerException("Entity passed for initialization is null");
    }

    Hibernate.initialize(entity);
    if (entity instanceof HibernateProxy) {
        entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer()
                .getImplementation();
    }
    return entity;
}
2022-08-01