休眠与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
但事件永远不会被初始化,一切都将是空的或空的。
- 一旦
FetchType.LAZY
被删除,一切工作正常。 - 这在Java中没有发生。
- 我试图在
var
上添加open
,以便Event
可以正确代理。 没有效果。 - 所有的
@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); }