WebSphere 7

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コンソールにアクセスします->トラブルシューティング->クラスローダービューア、ライブラリがロードされていることを確認します。

JPA2-On-WAS7

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