2012-11-15 115 views
2

我正在編寫我的第一個Hibernate JPA項目。我有一個很常見的問題(我發現很多文章),但對我來說沒有任何解決方案。休眠JPA - 錯誤:沒有EntityManager的持久性提供者

當我運行的應用程序,我得到這個錯誤:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named JpaTest2 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
at net.andy.DatabaseAccess.testJpa(DatabaseAccess.java:55) 
at net.andy.Main.main(Main.java:11) 

我的persistence.xml是:

<persistence-unit name="pu3" transaction-type="RESOURCE_LOCAL"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<class>net.andy.Writer</class> 
    <properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
    <!-- <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> --> 
    <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> 
    <property name="hibernate.connection.username" value="postgres"/> 
    <property name="hibernate.connection.password" value="postgres"/> 
    <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/testdb"/> 
    <property name="hibernate.max_fetch_depth" value="3"/> 
    </properties> 

這是我的課,我儘量節省東西分貝:

public static void testJpa() { 

    // Use persistence.xml configuration 

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaTest2"); 
    EntityManager em = emf.createEntityManager(); 

    // Work with the EM 
    Writer w = new Writer(); 
    //MapEntity map = new MapEntity(); 
    w.setId(5); 

    EntityTransaction transaction = em.getTransaction(); 
    transaction.begin(); 
    em.persist(w); 
    transaction.commit(); 
    em.close(); 
    emf.close(); 
} 

我讀過很多描述這個錯誤的文章。 到目前爲止,我有:

  1. 在persistence.xml中添加了一行。
  2. 改變的persistence.xml 位置(我試過大概大家地理位置也META-INF文件夾 ,MyProject的/ src目錄等)
  3. 添加庫休眠核心, 休眠-的EntityManager,休眠公地的註解, ejb3-persistence,hibernate-jpa,jta,postgresqljdbc(還有幾個 以上)。

如何解決這個問題?上面的代碼幾乎都是從教程中複製的,所以我認爲在libs或者項目結構中有一些問題,但是找不到這個問題的正確原因。

回答

0

您的persistence.xml中的持久性單元的名稱是pu3,而在構建EntityManagerFactory時您的代碼中使用的是JpaTest2。先嚐試修改(使用相同的名稱)。

+0

哦,我沒有看到這樣的錯誤。我更改了名稱,但有相同的錯誤。 – user1826222

+0

好吧,這是一個開始;現在您需要確保hibernate-entityframework在您的類路徑中。你是否從故意發佈的問題中去除了persistence.xml中的根元素? –

+0

感謝您的幫助。正如你所說,我再次通過我的班級路徑看。我發現我沒有爲jpa添加一個jar。我已經下載了休眠檔案,之前有文件夾libs/required,沒有hibernate-entitymanager.jar。它在不同的目錄中,這就是爲什麼我忘了它。再次感謝! – user1826222

0

您可能需要在pom.xml中配置dependenciesHere:設置配置。

的pom.xml

<project ...> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate-core-version}</version> 
    </dependency> 
    </dependencies> 
</project> 
相關問題