2015-04-01 69 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