在Hibernate Session期间,我加载了一些对象,其中一些由于延迟加载而作为代理加载.这一切都很好,我不想关闭懒惰加载.

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

知道某些对象的类和ID后,我如何才能将它们从代理转换为真正的对象呢?

目前,我看到的唯一解决方案是将该对象从Hibernate的缓存中逐出并重新加载,但由于许多原因,这真的很糟糕.

推荐答案

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

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;
}

Java相关问答推荐

如何在PFA中使用不确定的进度指标制作可暂停的任务?

使用json参数通过单击jSP文件中的按钮来运行server时出现问题

使用ExecutorService时在ThreadFactory中触发自定义newThread函数

AlarmManager没有在正确的时间发送alert

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

JavaFX Maven Assembly插件一直打包到错误的JDK版本

使用传递的参数构造异常的Mockito-doThrow(或thenThrow)

使用GridBagLayout正确渲染

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

测试何时使用Mockito强制转换对象会导致ClassCastException

Java ArrayList的整数和数组的泛型

为什么当我创建Robot对象时,JavaFX引发IlLegalStateException异常?

我怎样才能让IntelliJ标记toString()的任何实现?

是否为计划任务补偿系统睡眠?

如何在太阳系模拟器中添加月球?

一对多关系和ID生成

如何在SWT菜单项文本中保留@字符

ResponseEntity.控制器截断响应的JSON部分

如何在更改分辨率时将鼠标坐标计算为世界坐标

为什么我得到默认方法的值而不是被覆盖的方法的值?