没有名为test

时间:2015-08-21 10:59:20

标签: jpa persistence-provider

我正在尝试使用JPA开发Java EE Web应用程序来管理数据库。

当我尝试从数据库中检索行时,我发现错误:

  

"没有名为test"

的EntityManager的持久性提供程序

使用JPA的函数代码是:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");      
     EntityManager em =emf.createEntityManager();        
     EntityTransaction tx = em.getTransaction();
     try {
         tx.begin();
          @SuppressWarnings("unchecked")
          List<InputHStock> iph = em.createQuery("from Student").getResultList();
          for (Iterator<InputHStock> iterator = iph.iterator(); iterator.hasNext();) {
            InputHStock student = (InputHStock) iterator.next();
            System.out.println(student.getLocationCode());
          }
          tx.commit();
        } catch (Exception e) {
          tx.rollback();
        }   
}

我的persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 
xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="test">
    <class>application.InputHStock</class>
     <properties>
      <property name="javax.persistence.jdbc.driver"     value="oracle.jdbc.driver.OracleDriver" />
      <property name="javax.persistence.jdbc.url"    value="jdbc:oracle:thin:@localhost:1521:xe" />
      <property name="javax.persistence.jdbc.user" value="testSQL" />
      <property name="javax.persistence.jdbc.password" value="testpwd1" />
      <property name="eclipselink.ddl-generation" value="create-tables" />
      <property name="eclipselink.ddl-generation.output-mode" value="database" />
      </properties>
    </persistence-unit>
</persistence>

这是我在日食中的树状结构:

enter image description here

我也尝试过使用Eclipse工具来包含JPA但没有成功。

请注意,与数据库的连接正常,因为我可以在直接使用JDBC时检索数据。

2 个答案:

答案 0 :(得分:0)

您的persistence.xml缺少持久性提供程序。在使用EclipseLink时,添加

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

persistence-unit标记内。

答案 1 :(得分:0)

我认为pom.xml中缺少“ hibernate-entitymanager ”依赖项

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

可能您在pom中使用了hibernate-core。对于JPA,请使用hibernate-entitymanager而不是hibernate-core。

还需要在persistence.xml中提供提供者标签。

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>