WebSphere 7 & javax/persistence/OneToMany.orphanRemoval() error
Problem
In Hibernate development, contains a model class with JPA @OneToMany annotation :
@OneToMany( cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") public Set<Debit> getDebits() { return this.debits; }
When web application is deployed on WebSphere 7, it hit following error message :
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.
Solution
The OneToMany.orphanRemoval is specified in JPA 2.0, and look like WebSphere 7 contains older JPA library, which is loaded before your hibernate-jpa-2.0-api-1.0.0.Final.jar.
To fix it, put your JPA 2.0 (hibernate-jpa-2.0-api-1.0.0.Final.jar) library in the WebSphere’s highest priority class loader folder, which is under WAS7_FOLDER\AppServer\java\jre\lib\ext. Restart WebSphere server instance to take effect.
Now access WebSphere web console –> Troubleshooting –> Class loader viewer, make sure your library is loaded.

Now, WebSphere 7 will always load your Hibernate JPA 2.0 library.






Cheers for this article posting.Thanks Once more. Truly unique.
I would prefer to avoid cluttering up the lib/ext directory. I have tried setting the class loader policy to “Parent last”, but this has not worked.
I would like to avoid hack WebSphere lib like this if i do have choice, and “Parent last” is never work for me.
Do comment here if you find other solution :)
Another solution is declaring shared library with that jar. Then you have to link your application and that shared library.