1

我想通过自省获得由 Hibernate 管理的对象的表名(惰性)。

我的对象在属性处理程序中包含“org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer”。

我的对象是“mypackage.myObjectDO_ _javassist_2 $ $”类型,不包含“mypackage.myObjectDO”类包含的注释(我寻找注释javax.persistence.Table)。

我能怎么做?

4

1 回答 1

1

我想通过自省获得由 Hibernate 管理的对象的表名(惰性)。

这是一个不寻常的需求(Hibernate 应该把它抽象掉)但是假设你真的需要它......

我的对象是类型 (...) 并且不包含类 (...) 包含的注释

您必须取消代理代理。这是先前答案(来自 Bozho)的一个小方法:

public static <T> T initializeAndUnproxy(T var) {
    if (var == null) {
        throw new IllegalArgumentException("passed argument is null");
    }

    Hibernate.initialize(var);
    if (var instanceof HibernateProxy) {
        var = (T) ((HibernateProxy) var).getHibernateLazyInitializer()
                .getImplementation();
    }
    return var;
}

另请参阅Hibernate 论坛中的将代理对象转换为真实对象。

于 2010-09-24T14:43:25.667 回答