2015-04-01 40 views
2

不可当TomEE运行我的Java EE应用程序,我得到以下错误:Javax.persistance在TomEE

java.lang.NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery

有没有编译时错误,当我建立app.I我在Eclipse中开发,并有Apache TomEE下选定的项目属性中的目标运行时间,以便该项目可以访问Java EE。

由于该项目使用Hibernate我已经在WEB-INF \ lib目录下罐(这是我的理解,反过来使用javax.persistence这些罐子):

  • 休眠公地的注解 - 4.0 0.4
  • 休眠核心-4.3.5
  • 的Hibernate JPA的2.1

我见过像this one一大堆的问题,详细的解决办法是添加所需的Ĵ PA jar进入应用程序的lib目录,一切都会好起来的。但是,尽管这个解决方案可能会起作用,但听起来对我来说听起来很诡异,我希望TomEE能够自己管理JPA库。它是一个Java EE服务器,为什么它不这样做。什么是干净的解决方案?

+6

此类存在。我猜你的TomEE版本只支持JPA 2.0。事实上,TomEE的主页说:“Java EE 6 Web Profile”。 Java EE 6包含JPA 2.0,而不是2.1。 – 2015-04-01 06:15:59

+0

得到了类似的设置,我在TOMEE启动时发出了警告:... WARN- jar'/ /WEB-INF/lib/hibernate-jpa-2.1-api-1.0.0.Final.jar'包含违规类: javax.persistence.Entity。它会被忽略。任何想法如何克服这一点?切换到TOMEE-2.0.0.SNAPSHOT也许? – MWiesner 2015-04-28 11:06:37

+0

@ Continuity8 - 对我来说,通过将罐子放入生产env TOMEE来解决这个问题似乎也很棘手。此外,它不适用于maven用于集成测试的开发人员设置,例如...: - /任何人都有一个“干净的方式”的想法? – MWiesner 2015-04-28 11:12:55

回答

3

@JB Nizet的答案是接受的解决方案:由于JPA 2.1

This class exists since JPA 2.1. I guess your TomEE version only supports JPA 2.0. And indeed, thehome page of TomEE says: "Java EE 6 Web Profile". Java EE 6 includes JPA 2.0, not 2.1. – JB Nizet

+0

那么,你做了什么来解决这个问题? – Bagdat 2016-06-11 05:25:59

+0

你必须自己添加jar,或者默认使用支持JPA 2.1的容器。 – Continuity8 2016-06-11 05:42:10

+0

谢谢,我已将hibernate版本更改为符合jpa 2.0的4.2版本。谢谢你和@JB Nizet) – Bagdat 2016-06-11 05:52:47