2014-02-23 29 views
4

我正在嘗試使用JPA爲我目前正在參與的Java-EE項目設置持久性,並且遇到了許多配置問題。目前,我已經在persistence.xml中定義了一個RESOURCE_LOCAL持久性單元,目的是在解決設置JTA持久性單元及其相應的JTA數據源的問題之前,使用此單元進行單元測試並驗證其他所有工作。但是,即使這個「簡單」的情況也會導致錯誤。javax.persistence.PersistenceException:否EntityManager的持久性提供者名爲

詳細:

我得到的錯誤是這樣的:

javax.persistence.PersistenceException: No Persistence provider for EntityManager named kronosTestLocal 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
    at persistence.EntityManagerTest.getStaff(EntityManagerTest.java:56) 
    at persistence.EntityManagerTest.setup(EntityManagerTest.java:17) 
    ... 

的代碼片段拋出的錯誤是JUnit測試中的以下內容:

private final String persistenceUnitName = "kronosTestLocal"; 
.... 
final EntityManagerFactory entityManagerFactory = 
    Persistence.createEntityManagerFactory(persistenceUnitName); 

持久性。 xml(在META-INF中,並在intellij JPA方面聲明): (我嘗試刪除kronos持久性單元,以防它以某種方式干擾,但沒有h ELP)

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
    <persistence-unit name="kronos" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>jdbc/kronos-database</jta-data-source> 

     <class>persistence.entities.DaySlotsEntity</class> 
     <class>persistence.entities.DaysEntity</class> 
     <class>persistence.entities.EmailNotificationsEntity</class> 
     <class>persistence.entities.EmailSendingTimestampsEntity</class> 
     <class>persistence.entities.GroupSlotsEntity</class> 
     <class>persistence.entities.GroupsEntity</class> 
     <class>persistence.entities.InterviewerEntity</class> 
     <class>persistence.entities.InterviewerPreferencesEntity</class> 
     <class>persistence.entities.InterviewerUnavailableDaysEntity</class> 
     <class>persistence.entities.InterviewerWorkloadEntity</class> 
     <class>persistence.entities.InterviewsEntity</class> 
     <class>persistence.entities.PreferenceTypesEntity</class> 
     <class>persistence.entities.PreferencesEntity</class> 
     <class>persistence.entities.StaffEntity</class> 
     <class>persistence.entities.StudentsEntity</class> 
     <class>persistence.entities.SwapsEntity</class> 
    </persistence-unit> 

    <persistence-unit name="kronosTestLocal" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

     <class>persistence.entities.DaySlotsEntity</class> 
     <class>persistence.entities.DaysEntity</class> 
     <class>persistence.entities.EmailNotificationsEntity</class> 
     <class>persistence.entities.EmailSendingTimestampsEntity</class> 
     <class>persistence.entities.GroupSlotsEntity</class> 
     <class>persistence.entities.GroupsEntity</class> 
     <class>persistence.entities.InterviewerEntity</class> 
     <class>persistence.entities.InterviewerPreferencesEntity</class> 
     <class>persistence.entities.InterviewerUnavailableDaysEntity</class> 
     <class>persistence.entities.InterviewerWorkloadEntity</class> 
     <class>persistence.entities.InterviewsEntity</class> 
     <class>persistence.entities.PreferenceTypesEntity</class> 
     <class>persistence.entities.PreferencesEntity</class> 
     <class>persistence.entities.StaffEntity</class> 
     <class>persistence.entities.StudentsEntity</class> 
     <class>persistence.entities.SwapsEntity</class> 

     <properties> 
      <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/kronos"/> 
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> 
      <property name="hibernate.connection.username" value="postgres"/> 
      <property name="hibernate.connection.password" value="****"/> 
      <property name="show_sql" value="true"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

的Maven的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>kronos</artifactId> 
     <groupId>kronos</groupId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>ejb</artifactId> 

    <dependencies> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>3.6.7.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.2-1003-jdbc4</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.6</version> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
     </dependency> 

     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-all</artifactId> 
      <version>1.9.5</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-ejb-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <ejbVersion>3.2</ejbVersion> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

從我的研究,我已經看到了很多人遇到了類似的問題,但我可以告訴我沒有做任何的常見錯誤。我們中的一些人一直試圖解決這個問題一段時間,所以任何幫助都會受到歡迎。

+0

我在爆炸戰爭部署期間反覆出現這個錯誤。該修復只是爲了刪除分解目標文件夾並讓其重新部署。 – Amalgovinus

回答

8

如果您是通過JUnit測試並使用maven來執行此操作,則persistence.xml應位於src/test/resources/META-INF/persistence.xml之內,該測試將在測試執行時放入正確的位置。 src/main/resources/META-INF/中的文件未被使用,因爲它不在test-jar的路徑中。

+0

完美,固定它!非常感謝。實際上,我們在META-INF上的persistence.xml與src處於同一級別。 – Dalamar42

相關問題