1. ホーム
  2. java

[解決済み] Hibernateのプロキシを実際のエンティティオブジェクトに変換する方法

2022-04-20 20:02:49

質問

ハイバネート中 Session 私はいくつかのオブジェクトをロードしていますが、そのうちのいくつかは遅延ロードによりプロキシとしてロードされています。これはすべて問題なく、私は遅延ロードをオフにしたくありません。

しかし、後で私はいくつかのオブジェクト(実際には1つのオブジェクト)をRPC経由でGWTクライアントに送信する必要があります。そして、この具体的なオブジェクトはプロキシであることが起こります。だから、私はそれを本当のオブジェクトに変換する必要があります。私はHibernateで"materialize"のようなメソッドを見つけることができません。

クラスとIDがわかっているプロキシのオブジェクトを実数にするにはどうしたらいいですか?

今のところ、唯一の解決策は、Hibernateのキャッシュからそのオブジェクトを退避させ、再ロードすることですが、多くの理由で本当に悪いことです。

どのように解決するのですか?

私が使っている方法を紹介します。

public static <T> T initializeAndUnproxy(T entity) {
    if (entity == null) {
        throw new 
           NullPointerException("Entity passed for initialization is null");
    }

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