使用异常设置JPA持久性没有EntityManager的持久性提供程序

时间:2016-04-03 18:26:11

标签: java jpa eclipselink

我忽略了设置的某些方面,但我不知道在哪里看。 Eclipse,Tomcat和MySQL。在servlet中,我有一个例外:EntityManager名为EmployeeService的持久性提供程序。 MySQL服务器正在运行,我为项目配置了一个连接。我在构建路径中有eclipselink jar库。我可以检查什么才能使其正常工作?

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>

1 个答案:

答案 0 :(得分:0)

您可以通过

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

因为您的4_WEB_JPA中的持久单元名为persistent.xml