Error: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey with Spring controller

后端 未结 4 479
没有蜡笔的小新
没有蜡笔的小新 2020-12-07 00:21

I have a simple two table application written in Spring MVC and which uses Hibernate. Everything works perfectly well but if I try to unit test one of the controllers, I get

相关标签:
4条回答
  • 2020-12-07 01:01

    JoinColumn.foreignKey() was introduced with JPA 2.1, which was not implemented by Hibernate 4 until version 4.3. If you're using an older version of Hibernate 4 then try upgrading to 4.3.x.

    If you're already using Hibernate 4.3 then make sure you're also using JPA 2.1 to make sure the API and implementation match up.

    0 讨论(0)
  • 2020-12-07 01:01

    Another workaround can be found here: https://issues.jboss.org/browse/WFCORE-209

    workaround 1 update the javaee/api/main.module.xml as followed:

    <!--<module name="javax.persistence.api" export="true"/>-->
    <module name="javax.persistence.api" export="false"/>
    

    though this is non-portable.

    workaround 2

    update jboss-deployment-structure.xml as followed:

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
        <deployment>
            <exclude-subsystems>
                <subsystem name="jpa" />
            </exclude-subsystems>
            <exclusions>
                <!-- WFCORE-209 workaround -->
                <module name="javaee.api" />
                <!-- --------------------- -->
                <module name="javax.persistence.api" />
                <module name="org.hibernate" />
            </exclusions>
            <dependencies>
                <!-- WFCORE-209 workaround -->
                <module name="javax.activation.api" export="true"/>
                <module name="javax.annotation.api" export="true"/>
                <module name="javax.ejb.api" export="true"/>
                <module name="javax.el.api" export="true"/>
                <module name="javax.enterprise.api" export="true"/>
                <module name="javax.enterprise.deploy.api" export="true"/>
                <module name="javax.inject.api" export="true"/>
                <module name="javax.interceptor.api" export="true"/>
                <module name="javax.jms.api" export="true"/>
                <module name="javax.jws.api" export="true"/>
                <module name="javax.mail.api" export="true"/>
                <module name="javax.management.j2ee.api" export="true"/>
                <!-- <module name="javax.persistence.api" export="true"/> -->
                <module name="javax.resource.api" export="true"/>
                <module name="javax.rmi.api" export="true"/>
                <module name="javax.security.auth.message.api" export="true"/>
                <module name="javax.security.jacc.api" export="true"/>
                <module name="javax.servlet.api" export="true"/>
                <module name="javax.servlet.jsp.api" export="true"/>
                <module name="javax.transaction.api" export="true"/>
                <module name="javax.validation.api" export="true"/>
                <module name="javax.ws.rs.api" export="true"  services="export"/>
                <module name="javax.xml.bind.api" export="true"/>
                <module name="javax.xml.registry.api" export="true"/>
                <module name="javax.xml.soap.api" export="true"/>
                <module name="javax.xml.ws.api" export="true"/>
    
                <!-- This one always goes last. -->
                <module name="javax.api" export="true"/>
                <!-- --------------------- -->
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    

    this is fully portable

    0 讨论(0)
  • 2020-12-07 01:11

    I finally solved this similar problem, there was an old version(hibernate-jpa-2.0-api-1.0.0-Final.jar) in my lib folder which I guess has been preventing maven dependency from loading.

    So after I manually deleted it and added (hibernate-jpa-2.1-api-1.0.0-Final.jar) everything started to work.

    0 讨论(0)
  • 2020-12-07 01:18

    If you are on JBoss EAP 6.4.x

    Chances are it came with the JPA 2.0 and you will need to manually update it to 2.1! Follow the simple steps which worked for me.

    Download the JPA 2.1 from maven repository and update the JBoss module http://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api

    Copy the file into the JBoss modules directory

    Update the module.xml on the same directory

    0 讨论(0)
提交回复
热议问题