WebSphere 7およびjavax / persistence / OneToMany.orphanRemoval()エラー
問題
Hibernate開発では、JPA @OneToManyアノテーションを持つモデルクラスが含まれます。
@OneToMany( cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") public SetgetDebits() { 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ライブラリをロードします。