1

Hibernate が管理するオブジェクトのテーブル名をイントロスペクションで取得したい (lazy)。

私のオブジェクトには、プロパティハンドラーに「org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer」が含まれています。

オブジェクトのタイプは「mypackage.myObjectDO_ _javassist_2 $ $」で、クラス「mypackage.myObjectDO」に含まれる注釈が含まれていません (注釈 javax.persistence.Table を探します)。

どのようにできるのか?

4

1 に答える 1

1

Hibernate が管理するオブジェクトのテーブル名をイントロスペクションで取得したい (lazy)。

これは異常な必要性です (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 フォーラムの Converting proxy object to the real thingも参照してください。

于 2010-09-24T14:43:25.667 に答える