2014-02-06 51 views
0

我得到這個錯誤:在線程「主要」 javax.persistence.PersistenceException沒有持久性提供EntityManager的命名EmpDb

例外:否EntityManager的持久性提供者在javax.persistence.Persistence.createEntityManagerFactory命名EmployeeDb ( Persistence.java:85) 在javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) 在staffManagement.test.TestHarness.main(TestHarness.java:14)

但我就是不明白爲什麼 - 我在家用電腦上做了同樣的事情,沒有問題。這裏是我的代碼爲我的測試文件:

public class TestHarness { 

public static void main(String[] args) { 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("EmpDb"); 
    EntityManager em = emf.createEntityManager(); 
    EntityTransaction tx = em.getTransaction(); 
    tx.begin(); 

    Employee employee1 = new Employee("Brad", "Pitt", "Actor", 10000); 
    em.persist(employee1); 

    tx.commit(); 
    em.close(); 
} 

}

和我的persistence.xml文件:

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
version="2.0" 
xmlns="http://java.sun.com/xml/ns/persistence"> 

    <persistence-unit name="EmpDb" transaction-type="RESOURCE_LOCAL"> 

    <class>staffManagement.domain.Employee</class> 

    <properties>      
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" /> 
     <property name="javax.persistence.jdbc.url"  value="jdbc:derby://localhost:1527/DbName" /> 

     <property name="javax.persistence.jdbc.user"  value="APP" /> 
     <property name="javax.persistence.jdbc.password" value="APP" /> 

     <property name="eclipselink.logging.level"    value="FINE" /> 
     <property name="eclipselink.ddl-generation"    value="create-tables" /> 
     <property name="eclipselink.ddl-generation.output-mode" value="database" /> 
    </properties> 

請幫幫我!我把我的頭髮拉出來。我使用Eclipse和Derby db。我有meta-inf文件夾中的persistence.xml文件。

+0

看到我更新的答案。 –

+0

[Persistence.createEntityManagerFactory(PERSISTENCE \ _UNIT \ _NAME);](http:// stackoverflow。COM /問題/ 19322827 /空後的持久性,createentitymanagerfactorypersistence單位名稱) – cmd

回答

0

您需要使用persistence-unit標記將所有內容都包含在persistence.xml中。

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence"> 

    <persistence-unit name="EmpDb"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>staffManagement.domain.Employee</class> 

     <properties>      
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" /> 
      <property name="javax.persistence.jdbc.url"  value="jdbc:derby://localhost:1527/DbName" /> 
      <property name="eclipselink.target-database" value="Derby"/>    


      <property name="javax.persistence.jdbc.user"  value="APP" /> 
      <property name="javax.persistence.jdbc.password" value="APP" /> 

      <property name="eclipselink.logging.level"    value="FINE" /> 
      <property name="eclipselink.ddl-generation"    value="create-tables" /> 
      <property name="eclipselink.ddl-generation.output-mode" value="database" /> 
     </properties> 
    </persistence-unit> 

同時,指定持久性提供和目標DB:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<property name="eclipselink.target-database" value="Derby"/>    
0

您需要將persistence.xml文件移動到合適的位置。 就你而言,它應該是你的來源的兄弟姐妹。基本上,你的根包的兄弟姐妹,例如packageecho

以下是從JPA規範

A persistence.xml file defines a persistence unit. The persistence.xml file is 
located in the META-INF directory of the root of the persistence unit. 

持久性單元的根是這裏的關鍵。

如果你是一個非Java EE應用程序

The jar file or directory whose META-INF directory contains the persistence.xml 
file is termed the root of the persistence unit. 

如果你是在一個的Java EE應用程序,以下是有效的

In Java EE environments, the root of a persistence unit must be one of the following: 
• an EJB-JAR file 
• the WEB-INF/classes directory of a WAR file[80] 
• a jar file in the WEB-INF/lib directory of a WAR file 
• a jar file in the EAR library directory 
• an application client jar file 
0

奇怪的是我竟然沒必須補充一點。

持久性提供程序自動完成。

我做了什麼來解決這個問題,就是將行移到持久單元標記的上方,然後重新編譯並重新部署,然後將其移回並重新編譯並重新部署,並且工作。

不知道爲什麼它的工作,但它沒有

相關問題