2016-04-03 46 views
0

我忽略了設置的某些方面,但我不知道在哪裏尋找。 Eclipse,Tomcat和MySQL。在servlet中,我有一個例外:沒有持久性提供者EntityManager,名爲EmployeeService。 MySQL服務器正在運行,併爲項目配置了一個連接。我在構建路徑中有eclipselink jar庫。我可以檢查什麼才能使其工作?設置JPA持久性和例外情況沒有EntityManager的持久性提供者

Employee.java

package servlet; 
import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="employee") 
public class Employee implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private int id; 
    private String name; 
    private double salary; 

    public Employee() { } 
    public Employee(int id){ this.id = id; } 

    public int getId() { return this.id; } 
    public void setId(int id) { this.id = id; } 

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

    public double getSalary(){ return salary; } 
    public void setSalary(double salary){ this.salary = salary; } 

    public String toString(){ return "Employee: " + name; } 
} 

EmployeeService.java

package servlet; 

import java.util.List; 
import javax.persistence.EntityManager; 
import javax.persistence.TypedQuery; 

public class EmployeeService { 
    protected EntityManager em; 

    public EmployeeService(EntityManager em){ 
     this.em = em; 
    } 

    public Employee createEmployee(int id, String name, Double salary){ 
     Employee emp = new Employee(id); 
     emp.setName(name); 
     emp.setSalary(salary); 
     em.persist(emp); 
     return emp; 
    } 

    public List<Employee> findAllEmployees(){ 
     TypedQuery<Employee> query = em.createQuery("SELECT e FROM Employee e", Employee.class); 
     return query.getResultList(); 
    } 
} 

相關servlet代碼

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("EmployeeService"); 
    EntityManager em = emf.createEntityManager(); 
    EmployeeService service = new EmployeeService(em); 
    String name = request.getParameter("name"); 
    em.getTransaction().begin(); 
    Employee emp = service.createEmployee(158, name, 279445.00); 
    em.getTransaction().commit(); 
    System.out.println(emp); 

    List<Employee> list = service.findAllEmployees(); 
    for(Employee e : list){ 
     System.out.println(e); 
    } 

} 

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="4_WEB_JPA" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>servlet.Employee</class> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/company"/> 
      <property name="javax.persistence.jdbc.user" value="root"/> 
      <property name="javax.persistence.jdbc.password" value=""/> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

嗯,你正在尋找一個名爲「EmployeeService」的持久性單元,但是你唯一定義的單元名爲「4_WEB_JPA」。 –

+0

謝謝,現在它的工作。 – mathematted

回答

0

您可以通過

EntityManagerFactory emf = Persistence.createEntityManagerFactory("4_WEB_JPA"); 

,因爲你的執着單元在persistent.xml命名4_WEB_JPA發起EntityManagerFactory

相關問題