NoSuchMethodError:javax.persistence.JoinColumn.foreignKey()
我正在尝试在OpenShift(JBoss企业应用程序平台6)上部署我的应用程序,并且我得到了标题中提到的NoSuchMethodError。 所以我搜索了整个事情并发现了一些文章或线程,提到自JPA-API 2.1以来这个方法是可用的。 我发现Openshift所需的依赖包含JPA-API 2.0。 我试图排除这种依赖,但它不起作用。 有任何想法吗? 请在下面找到pom.xml。
4.0.0 christmasmarkets christmasmarkets war 1.0 christmasmarkets eap http://maven.repository.redhat.com/techpreview/all true true springsource-repo SpringSource Repository http://repo.springsource.org/release eap http://maven.repository.redhat.com/techpreview/all true true UTF-8 1.6 1.6 4.1.2.RELEASE 4.3.7.Final 3.5.6-Final 3.2.0.Final 2.2.3 9.3-1102-jdbc41 org.jboss.spec jboss-javaee-6.0 3.0.2.Final-redhat-4 pom provided org.hibernate.javax.persistence hibernate-jpa-2.0-api org.springframework spring-context ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-orm ${spring.version} com.fasterxml.jackson.core jackson-core ${jackson.version} com.fasterxml.jackson.core jackson-databind ${jackson.version} com.fasterxml.jackson.core jackson-annotations ${jackson.version} org.hibernate hibernate-entitymanager ${hibernate.version} org.postgresql postgresql ${postgre.version} openshift christmasmarkets maven-war-plugin 2.1.1 deployments ROOT
这里的问题是容器在运行时提供JPA 2.0。 在pom.xml
排除提供的依赖项仅在编译时有效。 要解决此问题,您必须在容器中配置类加载。
OpenShift JavaEE 6支持基于JBoss AS 7.来自AS7文档中的类加载 :
jboss-deployment-structure.xml是一个特定于JBoss的部署描述符,可用于以细粒度的方式控制类加载。 它应该放在META-INF(或Web部署的WEB-INF)的顶级部署中。 它可以执行以下操作:
Prevent automatic dependencies from being added Add additional dependencies ...
所以你需要的是添加一个自定义的jboss-deployment-structure.xml
文件来排除hibernate-jpa-2.0-api
自动添加。
基于OpenShift的文档 :
将此Maven依赖项添加到您的pom.xml:
org.hibernate.javax.persistence hibernate-jpa-2.1-api 1.0.0.Final