2015-10-04 51 views
0

我正在嘗試使用Hibernate實現來學習JPA。關於這個網絡有很多的博客,但是仍然努力實施它。我寫了一個創建EntityManagerFactory的Dao類。不過,雖然這看它PERSISTENCE_UNIT持久性單元如何在JPA中工作

javax.persistence.PersistenceException: No Persistence provider for EntityManager named test

private final String PERSISTENCE_UNIT = "test"; 
private EntityManager entityManager; 


public GenericDao() { 
    EntityManagerFactory factory = Persistence 
      .createEntityManagerFactory(PERSISTENCE_UNIT); 
    entityManager = factory.createEntityManager(); 

} 

我還創建了一個persistence.xml文件是在Web應用程序的META-INF文件夾中。它看起來像這樣。

<?xml version="1.0" encoding="UTF-8" ?> 
<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="test" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="javax.persistence.jdbc.url" value="jdbc:postgres://localhost:1532/test" /> 
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> 
      <property name="javax.persistence.jdbc.user" value="postgres" /> 
      <property name="javax.persistence.jdbc.password" value="postgres" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

用於部署Tomcat8正在使用。請讓我知道爲什麼應用程序無法查找PERSISTENCE_UNIT

+0

在輸出.war文件中(在/ WEB-INF/classes/META-INF中)是否有persistence.xml?在類路徑上是'hibernate-entitymanager'嗎? – Deltharis

+0

Tomcat不是普通的應用程序服務器;可能你應該在Java EE投訴應用程序服務器上嘗試它。 –

+0

hibernate-entitymanager位於類路徑中,但位於app/META-INF文件夾中的war文件persistence.xml文件中,不在/ WEB-INF/classes/META-INF中。 –

回答

0

根據評論 - 問題是你的persistence.xml位置。它需要正是您的應用程序希望它是:

WEB-INF/classes/META-INF/persistence.xml 

現在,爲什麼你遇到這樣的問題又是另一回事,你如何創建.war文件連接。但是,應該工作的解決方案是信任Maven來處理這個問題。如果將包裝設置爲war,並將META-INF文件夾放入資源中(src/main/resources/META-INF/persistence.xml),則應該處理這些事情。

相關問題