コードをかなり読んでデバッグした後、私はこれを理解しました。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
インスタンスを作成し、.@Autowire
LoadTimeWeaver
setLoadTimeWeaver
LocalContainerEntityManagerFactoryBean
これらの手順を実行すると、Tomcat の Spring Framework で Hibernate のランタイム エンティティ バイトコード インストルメンテーションを使用できるようになります。