加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Kotlin的Hibernate:@ManyToOne(fetch = FetchType.

发布时间:2020-12-15 02:20:18 所属栏目:Java 来源:网络整理
导读:我正在使用Hibernate和Kotlin,我在@ManyToOne关系上遇到FetchType.LAZY问题.考虑以下: @ManyToOne(fetch = FetchType.LAZY)open var event: Event? 问题是当使用FetchType.LAZY时,获取的Event将是类Event _ $$_ jvst _…并且带有JavaassistLazyInitializer.
我正在使用Hibernate和Kotlin,我在@ManyToOne关系上遇到FetchType.LAZY问题.考虑以下:

@ManyToOne(fetch = FetchType.LAZY)
open var event: Event?

问题是当使用FetchType.LAZY时,获取的Event将是类Event _ $$_ jvst _…并且带有JavaassistLazyInitializer.但事件永远不会被初始化,一切都将为null或为空.

>删除FetchType.LAZY后,一切正常.
>这在Java中没有发生.
>我尝试在var上添加open,以便可以正确代理事件.没有效果.
>所有@Entity课程当然也是开放的.如果删除了open关键字,则不会创建代理,因此不会出现懒惰.

我的猜测是Hibernate无法轻易代理这些默认的kotlin getter.有办法解决吗?

解决方法

您可以使用此静态方法来对您的实体进行deproxy

/**
 * Utility method that tries to properly initialize the Hibernate CGLIB
 * proxy.
 * @param <T>
 * @param maybeProxy -- the possible Hibernate generated proxy
 * @param baseClass -- the resulting class to be cast to.
 * @return the object of a class <T>
 * @throws ClassCastException
 */
public static <T> T deproxy(Object maybeProxy,Class<T> baseClass) throws ClassCastException {
    if (maybeProxy instanceof HibernateProxy) {
        return baseClass.cast(((HibernateProxy) maybeProxy).getHibernateLazyInitializer().getImplementation());
    }
    return baseClass.cast(maybeProxy);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读