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

我正在使用Hibernate与Kotlin和我在@ManyToOne关系上的@ManyToOne问题。 考虑以下几点:

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

问题是,当使用FetchType.LAZY时,获取的Event将是Event_$$_jvst_...类上的Event_$$_jvst_... JavaassistLazyInitializer 但事件永远不会被初始化,一切都将是空的或空的。

  1. 一旦FetchType.LAZY被删除,一切工作正常。
  2. 这在Java中没有发生。
  3. 我试图在var上添加open ,以便Event可以正确代理。 没有效果。
  4. 所有的@Entity类当然也是open 。 如果open关键字被删除,将不会创建代理,所以没有懒惰。

我的猜测是,Hibernate不能轻易地代理这些默认的kotlin获得者。 有没有办法解决它?

你可以使用这个静态方法来解除你的实体

 /** * 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); }