WebSphere 7
問題
Hibernate開発では、JPA @OneToManyアノテーションを持つモデルクラスが含まれています。
@OneToMany( cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") public Set<Debit> 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`はライブラリパスに含まれています。
解決策
OneToMany.orphanRemoval`はJPA 2.0で指定されており、WebSphere 7には古いJPAライブラリが含まれているようです。これは
hibernate-jpa-2.0-api-1.0.0.Final.jar`の前にロードされています。
これを修正するには、
WAS7__FOLDER \ AppServer \ java \ jre \ lib 'にあるWebSphereの最優先クラスローダフォルダにJPA 2.0(
hibernate-jpa-2.0-api-1.0.0.Final.jar`)ライブラリを置きます。 \ ext`です。 WebSphereサーバー・インスタンスを再始動して、有効にします。
WebSphere Web Console – >トラブルシューティング – > Class loader viewerにアクセスし、ライブラリがロードされていることを確認します。
現在、WebSphere 7は常にHibernate JPA 2.0ライブラリーをロードします。