Weblogic JPA 2.1 Hibernate 4无法运行java.lang.NoSuchMethodError

Sim*_*lls 3 java spring hibernate weblogic jpa

我遇到了一个经典问题,即尝试在weblogic服务器上运行Web应用程序并因为weblogic服务器具有旧的类副本而遇到错误.

我遇到的主要问题是在尝试使用JPA 2.1时遇到以下问题:

weblogic.application.ModuleException: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
Run Code Online (Sandbox Code Playgroud)

这里显而易见的答案是它在没有该类的服务器上使用JPA版本.

我已将weblogic.xml文件设置为以下内容:

<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">
<wls:weblogic-version>12.1.3</wls:weblogic-version>
<wls:jsp-descriptor/>
<wls:debug>true</wls:debug>
</wls:jsp-descriptor>
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>  
</wls:container-descriptor>
<wls:context-root>DiscoveryPortal</wls:context-root>
</wls:weblogic-web-app>
Run Code Online (Sandbox Code Playgroud)

关键线是:prefer-web-inf-classes:true

这似乎适用于某些课程但不是全部.

Dis*_*ing 5

Weblogic 12c(据说)允许在.war和.ear文件中进行类过滤.我建议搬家:

<wls:container-descriptor>
  <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>  
</wls:container-descriptor>
Run Code Online (Sandbox Code Playgroud)

至:

<prefer-application-packages> 
  <package-name>javax.persistence.*</package-name> 
</prefer-application-packages> 

<prefer-application-resources> 
  <resource-name>javax.persistence.*</resource-name> 
  <resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
</prefer-application-resources>
Run Code Online (Sandbox Code Playgroud)

过滤效果似乎要好得多prefer-web-inf-classes.

请参阅此处的Oracle文档,其中说明它适用于.war文件.如果没有,您可以考虑切换到.ear以查看会发生什么.

  • 我遇到了同样的错误,并将该参数添加到weblogic.xml文件中。问题解决了。weblogic是一个巨大的问题。 (2认同)