2011-10-17 14 views
4

我在我的项目中使用了Spring和hibernate的JPA 2.0。如何在WAS 6.1中使用javax/persistence/spi/PersistenceUnitInfo.getValidationMode()

但是,运行时为WAS 6.1。

汇编没有问题。

但是,应用程序的部署过程中,我得到以下错误:

com.ibm.ws.exception.RuntimeError: java.lang.RuntimeException: java.lang.NoSuchMethodError: javax/persistence/spi/PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode; 

使用Ctrl + Shift + T搜索PersistenceUnitInfo类,我发现它位于下面的罐子:

\IBM\SDP\runtimes\base_v61\lib\j2ee.jar 

\WEB-INF\lib\hibernate-jpa-2.0-api-1.0.1.Final 

我从以上的罐子和DE两者类提取使用JAD编译它们进行比较。

我发现getValidationMode()方法在j2ee.jar中不存在,但存在于hibernate-jpa jar中。

这是我得到的错误的原因? 如何解决?我如何告诉websphere在hibernate jar中寻找类,而不是在服务器运行库lib中?

回答

2

无论你做什么,都不能在Websphere 6.1中使用JPA 2.0。正如你注意到的那样,它深深地融入了WAS内部。你有两个选择:

  1. 迁移到WAS 7.0与相应的功能包(更多资讯在我other answer)。
  2. 使用JPA 1.0将您的Hibernate降级到3.3.2 GA。
+0

要明确,您不能在6.1(持久性上下文/ unit-ref和@ PersistenceContext/UnitRef)中使用容器管理的JPA。如果您使用共享库来覆盖JPA支持,那么您仍然可以使用应用程序管理的JPA。当然,你失去了很多好处... –

+0

@bkail但你仍然是指JPA 1.0,对不对?我对WAS的6.1版本并不熟悉,我只是根据我的7.0经验进行外推。所以它更加困难6.1 ... – MaDa

+0

不,如果你重写JPA API(使用父类最后的CL),那么你可以使用任何你想要的(包括JPA 2.0),只要你不需要期望容器与您提供的内容整合。 –