使用Jboss EAP 6.1在代码中使用javax.persistence.JoinColumn.foreignKey批注时出错

时间:2015-03-23 06:05:07

标签: jpa jboss6.x

我在代码中使用javax.persistence.JoinColumn.foreignKey。该项目使用WildFly服务器工作正常,但当我使用Jboss EAP 6.1时,它给出了以下错误:

  

java.lang.NoSuchMethodError:   javax.persistence.JoinColumn.foreignKey()Ljavax /持久/ ForeignKey的;               org.hibernate.cfg.AnnotationBinder.bindManyToOne(AnnotationBinder.java:2884)               org.hibernate.cfg.AnnotationBinder.bindOneToOne(AnnotationBinder.java:3051)               org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1839)               org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)               org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)

当我进一步研究这个问题时,我发现JBoss Library不支持Join列。

但是,我的项目库支持Join列,我打算在我的代码中使用这些库。但是Jboos库似乎覆盖了类路径中的库。

我在jboss-deployment-structure.xml

中尝试了下面的代码
<exclusions>
    <module name="javax.persistence.api"/>
    <module name="javaee.api"/> 
</exclusions> 

但我收到的错误

  

11:19:55,195 ERROR [org.jboss.msc.service.fail](MSC服务主题1-7)MSC000001:无法启动服务   。jboss.deployment.unit “myappl.war” .PARSE:   服务中的org.jboss.msc.service.StartException   jboss.deployment.unit。“myappl.war”.PARSE:JBAS018733:失败了   进程阶段PARSE部署“myappl.war”引起:   java.lang.IllegalStateException:JBWS021001:意外的元素   解析处理程序:handler-config

2 个答案:

答案 0 :(得分:1)

使用JPA 2.0 API的JBoss EAP 6.x为compliant,而JPA 2.1中添加了javax.persistence.ForeignKey

为了使其工作,您需要手动集成它。可以找到可能的解决方法here

答案 1 :(得分:0)

此问题的根本原因是EAP 6.3.x基于Java EE 6规范,JPA 2.0是此规范的一部分。最新版本的Hibernate(4.3.x)带有JPA 2.1版,它是Java EE 7规范的一部分。从理论上讲,要解决这个问题,在jboss-deployment-structure.xml文件中排除'org.hibernate'模块和'javax.persistence'就足够了,但它并没有解决问题。根据Red Hat的说法,这是一个BUG。

1)解决方案是使用EAP 6.3.x发行版中存在的Hibernate版本。解决,但不能将应用程序保存到服务器库的版本。

2)另一个解决方案是直接在发行版中将JPA 2.0的版本更改为2.1,位于\ JBOSS_DIST \ modules \ system \ layers \ base \ javax \ persistence \ api \ main中。也解决了,但是这个解决方案是不可接受的,因为使用EAP中存在的Hibernate版本6.3.x的应用程序可能会受到影响。

3)我们可能会按照此地址http://mariemjabloun.blogspot.com.br/2014/03/use-jboss-jpa-21-and-hibernate-43-on.html中的步骤进行操作,但特别是找到了一个非常费力的解决方案。

4)最后,经过大量搜索和尝试,找到了解决问题的合理解决方案,在RedHat的网站上https://access.redhat.com/solutions/404223。我相信未来版本的EAP,应该予以纠正。