如何从代理类中检索代理类?

Fla*_*vio 7 java hibernate

我正在使用Hibernate和代理,我得到属于类的对象test.DBUser$$EnhancerByCGLIB$$40e99a2d.

是否有一个Hibernate方法test.DBUser从代理类中检索基类(在本例中)?我知道Hibernate.getClass(),但它需要一个Object,而我正在寻找一个接受输入的方法Class.

Pav*_*vel 10

虽然我非常喜欢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();
  }
}
Run Code Online (Sandbox Code Playgroud)


Fla*_*vio 8

我发现,这比我想象的要容易:只需调用getSuperclass()代理类即可获取未代理的原始类。我不确定这有多普遍,但它似乎有效。