コードをかなり読んでデバッグした後、私はこれを理解しました。Hibernate ORM のドキュメントにこの情報が含まれていないのは残念です。(公平を期すために、Hibernate EntityManager のドキュメントには記載されていますが、簡単には見つかりません。「遅延プロパティ フェッチの使用」に関する Hibernate の説明では、「遅延プロパティの読み込みにはビルド時のバイトコード インストルメンテーションが必要です。」とのみ記載されています。ランタイムインストルメンテーションを使用できることについては言及されていません。 Hibernate EntityManager プロパティを使用します。)
最初に行う必要があるのは、"hibernate.ejb.use_class_enhancer"JPA プロパティを"true"( String) に設定することです。addTransformerこれにより、HibernateはPersistenceUnitInfoインスタンスを呼び出して「アプリケーション サーバー」クラス変換を使用できることを伝えます。「アプリケーション サーバー」クラスの変換は、まさに Spring のLoadTimeWeaver. Spring の Java 構成と を使用しており、Hibernate がコンパイル時の依存関係である場合は、文字列リテラルの代わりに定数をLocalContainerEntityManagerFactoryBean使用できます(これにより、タイプミスが防止されます)。AvailableSettings.USE_CLASS_ENHANCER"hibernate.ejb.use_class_enhancer"
Spring の Java 構成を使用している場合は、SPR-10856が修正されるまで、追加の手順を実行する必要があります。LocalContainerEntityManagerFactoryBeanのsetLoadTimeWeaverメソッドは本来あるべきように自動的に呼び出されないため、手動で呼び出す必要があります。あなたの@Configurationクラスでは、単にまたは@Injectインスタンスを作成し、.@AutowireLoadTimeWeaversetLoadTimeWeaverLocalContainerEntityManagerFactoryBean
これらの手順を実行すると、Tomcat の Spring Framework で Hibernate のランタイム エンティティ バイトコード インストルメンテーションを使用できるようになります。