WebSphere 7およびjavax / persistence / OneToMany.orphanRemoval()エラー
問題
Hibernate開発では、JPA @OneToManyアノテーションを持つモデルクラスが含まれます。
@OneToMany(
cascade=CascadeType.ALL,
fetch = FetchType.LAZY, mappedBy = "user")
public Set getDebits() {
return this.debits;
}
WebアプリケーションをWebSphere 7にデプロイすると、次のエラーメッセージが表示されます。
Caused by: java.lang.NoSuchMethodError: javax/persistence/OneToMany.orphanRemoval()Z
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1912)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
... 118 more
P.S hibernate-jpa-2.0-api-1.0.0.Final.jar is included in the library path.
溶液
OneToMany.orphanRemovalはJPA 2.0で指定されており、WebSphere 7にはhibernate-jpa-2.0-api-1.0.0.Final.jarの前にロードされる古いJPAライブラリーが含まれているように見えます。
これを修正するには、JPA 2.0(hibernate-jpa-2.0-api-1.0.0.Final.jar)ライブラリをWebSphereの最も優先度の高いクラスローダーフォルダ(WAS7_FOLDER\AppServer\java\jre\lib\extの下)に配置します。 WebSphereサーバーインスタンスを再起動して有効にします。
次に、WebSphere Webコンソールにアクセスします->トラブルシューティング->クラスローダービューア、ライブラリがロードされていることを確認します。

これで、WebSphere 7は常にHibernate JPA 2.0ライブラリをロードします。