我已經寫了(使用Eclipse)一個使用JPA的小程序。現在我想手動編譯並使用命令行運行此程序。我還將所有源文件放在一個單獨的目錄中(不在Eclipse的工作空間內)。該目錄是這樣的:PersistenceException:否EntityManager的持久性提供者名爲
directory
|- src
| |- javax
| | |- persistence
| | |- <...>
| |- main
| |- META-INF
| | |- javax
| | | |- persistence
| | |- persistence.xml
| |
| |- <..>
|- run.bat
注:我故意有2個在他們的所有類文件的javax目錄。
run.bat中所包含的行:
javac -cp ./src ./src/main/Main.java
java -cp ./src main.Main
據我瞭解,我越來越不符合META-INF/persistence.xml文件的問題,因爲錯誤的(不象其他許多人對計算器) 。我這樣說,因爲我已經writen按照我的主線:
<...>
Thread.currentThread().setContextClassLoader(new ClassLoader() {
@Override
public Enumeration<URL> getResources(String name) throws IOException {
System.out.println("resource requested=" + name);
if (name.equals("META-INF/services/javax.persistence.spi.PersistenceProvider")) {
<--- MARK ---> return Collections.enumeration(Arrays.asList(new File("src/javax/persistence/spi/PersistenceProvider.class")
.toURI().toURL()));
} else if (name.equals("META-INF/persistence.xml")) {
return Collections.enumeration(Arrays.asList(new File("src/META-INF/persistence.xml")
.toURI().toURL()));
}
return super.getResources(name);
}
});
emFactory = Persistence.createEntityManagerFactory("uzduotis");
<...>
所以,當我啓動的run.bat程序打印:
resource name=name=META-INF/services/javax.persistence.spi.PersistenceProvider
(它從來沒有獲取到部分地方計劃詢問 「META-INF/persistence.xml中」 資源)
那麼它打破了,給我一個錯誤:
如果我改變註明聲明
return super.getResources("src/" + name);
,則錯誤只是說:
我缺少什麼?
Peristence.xml:
編輯: 計劃prety簡單:沒有休眠,只是它檢索REST服務的一些信息,並與它的工作,主要是使用的javax幾類和w3c外部庫。項目瀏覽器的照片來描繪其簡單性。
編輯2.解決方案
我找到了一種方法,使其工作雖然我不能完全肯定的原因。所以如果有人能回答爲什麼以下更改解決了問題,我會很樂意將其標記爲一個答案
我加和的EclipseLink使用mysql-connector-java的罐子到SRC目錄。 eclipselink.jar修復了這個問題,並且需要mysql-connector-java.jar,因爲我得到了其他錯誤(我正在使用數據庫)。最後我在運行中改變了路線。從
java -cp ./src main.Main
bat文件到
java -cp ./src;./src/eclipselink.jar;./src/mysql-connector-java.jar; main.Main
也許這個答案可以幫助:http://stackoverflow.com/a/1285436/1506009 – Rozart
該帖子的哪個部分認爲可以解決我的問題? – sdafsDGZvb
好像你沒有在你的persistence.xml文件中指定持久性提供者。所以我會嘗試在鏈接的答案中指定它。 只需在'persistence unit name =「uzduotis」>元素內添加' org.hibernate.ejb.HibernatePersistence '。請記住,您需要爲HibernatePersistence解決依賴關係。 –
Rozart