hibernate docs から、特定のケースでは、遅延読み込みが機能するために、ビルド時のインストルメンテーションが必要であることがわかっています。
Hibernate が多対 1 の関連付けられたオブジェクトを熱心にフェッチするのを止める方法
だから私は次のことをしました:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<configuration>
<tasks>
<taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
<classpath>
<path refid="maven.runtime.classpath" />
<path refid="maven.plugin.classpath" />
</classpath>
</taskdef>
<instrument verbose="true">
<fileset dir="target/classes">
<include name="**/*.class" />
</fileset>
</instrument>
</tasks>
</configuration>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
しかし、それはエラーを出しました
java.lang.VerifyError: (クラス: com/mycompany/dao/UserDaoHibernateImpl$2、メソッド: 署名: (Lcom/mycompany/dao/UserDaoHibernateImpl;II)V) スタック上のオブジェクト/配列を期待しています
これを削除すると問題が解決するため、これは間違いなく上記のインストルメンテーションによるものです。また、ウェブ検索では、これが javaasist のバグと、Spring バージョンと Hibernate バージョンの間の競合に何らかの形で関連していることも示されています。
私は休止状態3.5.6-Final、Spring 3.0.6-RELEASEを使用しています
javassist バージョンのすべての組み合わせを試し、さまざまなバージョンで javassist を asm に変更しようとしましたが、問題はまだ存在します。
ありがとうヤン