2016-05-30 81 views
0

pom.xml錯誤使用JPA persistence.xml中沒有持久性提供的EntityManager

<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>net.vyhn</groupId> 
    <artifactId>jpa</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>jpa Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>eclipselink</artifactId> 
      <version>2.6.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>org.eclipse.persistence.core</artifactId> 
      <version>2.6.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>org.eclipse.persistence.jpa</artifactId> 
      <version>2.6.3</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.persistence</groupId> 
      <artifactId>persistence-api</artifactId> 
      <version>1.0.2</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>6.0.2</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>jpa</finalName> 
    </build> 
</project> 

Employee.java

package example.com.domain; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.ManyToOne; 

@Entity 
public class Employee { 

    @Id 
    @GeneratedValue 
    private Long id; 
    private String name; 

    @ManyToOne 
    private Department department; 

    public Employee() { 
    } 

    public Employee(String name, Department department) { 
     this.name = name; 
     this.department = department; 
    } 


    public Employee(String name) { 
     this.name = name; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Department getDepartment() { 
     return department; 
    } 

    public void setDepartment(Department department) { 
     this.department = department; 
    } 

    @Override 
    public String toString() { 
     return "Employee [id=" + id + ", name=" + name + ", department=" 
       + department.getName() + "]"; 
    } 

} 

Department.java

package example.com.domain; 

import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import java.util.ArrayList; 
import java.util.List; 

@Entity 
public class Department { 

    @Id 
    @GeneratedValue 
    private Long id; 


    private String name; 

    @OneToMany(mappedBy = "department", cascade = CascadeType.PERSIST) 
    private List<Employee> employees = new ArrayList<Employee>(); 


    public Department() { 
     super(); 
    } 

    public Department(String name) { 
     this.name = name; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<Employee> getEmployees() { 
     return employees; 
    } 

    public void setEmployees(List<Employee> employees) { 
     this.employees = employees; 
    } 

} 

JpaTest.java

package example.com.jpa; 

import example.com.domain.Department; 
import example.com.domain.Employee; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.EntityTransaction; 
import javax.persistence.Persistence; 
import java.util.List; 

public class JpaTest { 

    private EntityManager manager; 

    public JpaTest(EntityManager manager) { 
     this.manager = manager; 
    } 

    public static void main(String[] args) { 
     EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistenceUnit"); 
     EntityManager manager = factory.createEntityManager(); 
     JpaTest test = new JpaTest(manager); 
     EntityTransaction tx = manager.getTransaction(); 
     tx.begin(); 
     try { 
      test.createEmployees(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     tx.commit(); 
     test.listEmployees(); 
     System.out.println(".. done"); 
    } 

    private void createEmployees() { 
     int numOfEmployees = manager.createQuery("Select a From Employee a", Employee.class).getResultList().size(); 
     if (numOfEmployees == 0) { 
      Department department = new Department("java"); 
      manager.persist(department); 
      manager.persist(new Employee("Jakab Gipsz", department)); 
      manager.persist(new Employee("Captain Nemo", department)); 
     } 
    } 

    private void listEmployees() { 
     List<Employee> resultList = manager.createQuery("Select a From Employee a", Employee.class).getResultList(); 
     System.out.println("num of employess:" + resultList.size()); 
     for (Employee next : resultList) { 
      System.out.println("next employee: " + next); 
     } 
    } 

} 

當我運行JpaTest.java,有錯誤:

"C:\Program Files\Java\jdk1.8.0_92\bin\java" -Didea.launcher.port=7533 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_92\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_92\jre\lib\rt.jar;C:\Users\Administrator\IdeaProjects\demo_jpa\target\classes;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\eclipselink\2.6.3\eclipselink-2.6.3.jar;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\javax.persistence\2.1.1\javax.persistence-2.1.1.jar;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\commonj.sdo\2.1.1\commonj.sdo-2.1.1.jar;C:\Users\Administrator\.m2\repository\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;C:\Users\Administrator\.m2\repository\org\glassfish\javax.json\1.0.4\javax.json-1.0.4.jar;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\org.eclipse.persistence.core\2.6.3\org.eclipse.persistence.core-2.6.3.jar;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\org.eclipse.persistence.asm\2.6.3\org.eclipse.persistence.asm-2.6.3.jar;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\org.eclipse.persistence.jpa\2.6.3\org.eclipse.persistence.jpa-2.6.3.jar;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\org.eclipse.persistence.antlr\2.6.3\org.eclipse.persistence.antlr-2.6.3.jar;C:\Users\Administrator\.m2\repository\org\eclipse\persistence\org.eclipse.persistence.jpa.jpql\2.6.3\org.eclipse.persistence.jpa.jpql-2.6.3.jar;C:\Users\Administrator\.m2\repository\javax\persistence\persistence-api\1.0.2\persistence-api-1.0.2.jar;C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\6.0.2\mysql-connector-java-6.0.2.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.1.2\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain example.com.jpa.JpaTest 
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named persistenceUnit 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) 
    at example.com.jpa.JpaTest.main(JpaTest.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

enter image description here 幫我解決這個錯誤,謝謝!

+0

是的,讓我們來看看我的屏幕截圖(項目結構) –

+0

嘗試把persistence.xml中的資源文件夾 – mubeen

+0

你有一個大約的persistence.xml消息,但沒有打擾發佈那個文件?! –

回答

0

您必須將persistence.xml放入java/resources文件夾中。

<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 

我希望這將工作

+0

不,把它放在'\ src \ main \ resources \ META-INF \ persistence.xml'中,雖然persistence.xml放置正確,問題仍然存在。 –

+0

嘗試添加此http://mvnrepository.com/artifact/org.eclipse.persistence/javax.persistence/2.1.1依賴 – mubeen

相關問題