10

JPA (JPA プロバイダーとして Hibernate) を使用しています。私は本当に休止状態の仕様を避け、JPA 仕様を使用しようとしています。怠惰なエンティティを初期化する関数があります。残念ながら、Hibernate 固有の機能を使用します。これは私の機能です:

private 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;
    }

エンティティを初期化する純粋なJPAの方法はありますか?

4

1 に答える 1

8

エンティティを初期化する標準的な方法はないようです。

エンティティが初期化されている (完全にロードされている) かどうかを確認する標準的な方法があり、それはPersistenceUnitUtil経由です (遅延ロードされた JPA コレクションが初期化されているかどうかをテストする方法も参照してください) 。

エンティティがまだアタッチされている限り、そのプロパティにアクセスして初期化を強制できます。これはあまりきれいではありませんが、ある程度機能します。欠点は、プロパティの正確な性質 (多くの要素を持つコレクションなど) によっては、データベースに対して数十、数百、さらには数千ものクエリを実行する可能性があることです。

多くの場合、(不明な) エンティティをプログラムで強制的に初期化するよりも、何を初期化する必要があるかを事前に指定する方が適切です。これについての記事をここに書きました。

しかし、標準的なフレームワーク メソッドへの 1 回の呼び出しでエンティティを完全に初期化する必要がある場合は、残念ながら方法がないようで、今のところ Hibernate 固有のコードに固執する必要があります。

于 2012-10-07T18:50:17.613 に答える