使用Kotlin休眠:@ManyToOne(fetch = FetchType.LAZY)

Voj*_*ěch 5 java hibernate kotlin

我正在与Kotlin一起使用Hibernate,但FetchType.LAZY@ManyToOne关系方面存在问题。考虑以下内容:

@ManyToOne(fetch = FetchType.LAZY)
open var event: Event?
Run Code Online (Sandbox Code Playgroud)

问题是,当FetchType.LAZY使用时,获取的内容Event将是Event_$$_jvst_...带有此类的JavaassistLazyInitializer。但是该事件永远不会初始化,所有内容都将为null或为空。

  1. 一旦FetchType.LAZY被删除,一切正常。
  2. 这不是在Java中发生的。
  3. 我尝试添加openvar以便Event可以正确代理。没有效果。
  4. 所有的@Entity课程当然open也是。如果open删除了关键字,将不会创建任何代理,因此不会造成延迟。

我的猜测是,Hibernate无法轻松代理这些默认的Kotlin getter。有办法解决吗?

小智 0

您可以使用此静态方法来代理您的实体

/**
 * 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);
}
Run Code Online (Sandbox Code Playgroud)