我将 Hibernate 与代理一起使用,我获得了属于类的对象,例如 test.DBUser$$EnhancerByCGLIB$$40e99a2d
。
是否有 Hibernate 方法从代理 类 中检索基类(在本例中为 test.DBUser
)?我知道 Hibernate.getClass()
,但它需要一个 Object
,而我正在寻找一种将 Class
作为输入的方法.
最佳答案
虽然我真的很喜欢 Flavio 发布的方法的简单性,但我不能在生产代码中使用它,除非它被记录为受支持。此外,如果您在 LazyInitializer 上调用 .getImplementation(),它将强制初始化代理(如果尚未初始化),这会对性能产生负面影响。我提出了解决这两个问题的方法:
public static Class<?> getClassForHibernateObject(Object object) {
if (object instanceof HibernateProxy) {
LazyInitializer lazyInitializer =
((HibernateProxy) object).getHibernateLazyInitializer();
return lazyInitializer.getPersistentClass();
} else {
return object.getClass();
}
}
关于java - 如何从代理类中检索代理类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13540923/