簡體   English   中英

線程“ main”中的異常javax.persistence.PersistenceException:沒有名為EntityTest的EntityManager的持久性提供程序

[英]Exception in thread “main” javax.persistence.PersistenceException: No Persistence provider for EntityManager named databaseTest

我正在嘗試在Java Web應用程序中使用oracle數據庫,但是當我將代碼作為Java應用程序運行時,卻不斷收到錯誤消息:

線程“主”中的異常javax.persistence.PersistenceException:沒有名為EntityTest的EntityManager的持久性提供程序

這是我的代碼,只是創建實體管理器的簡單代碼:

 package com.sabir.test;

import javax.persistence.Persistence;

public class DatabaseService {

    public static void main(String[] args) {
        System.out.println("test");
        Persistence.createEntityManagerFactory("databaseTest");
    }

}

這是我的persistence.xml文件

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
    <persistence-unit name= "databaseTest" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
            <property name="javax.persistence.jdbc.user" value="HR"/>
            <property name="javax.persistence.jdbc.password" value="password"/>
        </properties>
    </persistence-unit>
</persistence>

如果需要,這里是我的pom.xml文件:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sabir.test</groupId>
  <artifactId>databaseTest</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>databaseTest Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
     <dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
</dependency>
<dependency>
   <groupId>org.eclipse.persistence</groupId>
   <artifactId>eclipselink</artifactId>
   <version>2.5.0-RC1</version>
   <scope>compile</scope>
</dependency>

  </dependencies>

   <repositories>
    <repository>
      <id>codelds</id>
      <url>https://code.lds.org/nexus/content/groups/main-repo</url>
    </repository>
    <repository>
    <id>oss.sonatype.org</id>
    <name>OSS Sonatype Staging</name>
    <url>https://oss.sonatype.org/content/groups/staging</url>
</repository>
<repository>
   <id>EclipseLink</id>
   <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
</repository>
  </repositories>

  <build>
    <finalName>databaseTest</finalName>
  </build>
</project>

我不知道為什么我得到了錯誤! 這也是我的文件結構:

[在此處輸入圖片說明

我懷疑文件結構,但是在檢查了許多網站之后,我認為這是正確的。 我也在maven中導入了eclipslink,所以我相信這就是我所需要的,我還添加了存儲庫或oracle。

我的數據庫也已啟動並且正在運行,我可以從oracle開發人員工具中查詢

首先檢查構建路徑上是否有Maven庫。 在Eclipse中,您將轉到

Project Properties -> Java Build Path -> Libraries.

如果這樣做,請檢查以下內容:

您在類路徑中沒有要引用的提供程序。

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

我建議將以下內容添加到您的依賴項中(並刪除eclipselink依賴項):

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

或將eclipselink依賴項更改為

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa</artifactId>
    <version>2.6.4</version>
</dependency>

您如何以及在何處從EntityManagerFactory獲取EntityManager? 我只看到您僅在創建EntityManagerFactory實例。 它應該是

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

通常,僅當您要在Java SE環境中進行引導時,此方法才有用。 相反,您可以使用依賴項注入:

@PersistenceContext
EntityManager em;

要么

@PersistenceUnit(unitName="myUnit")
EntityMangerFactory emf;

然后在您的方法中,您可以再次獲得EntityManager,如下所示

EntityManager em = emf.createEntityManager();

或者,您可以使用JNDI查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM