![](/img/trans.png)
[英]JPA + Hibernate = No Persistence provider for EntityManager
[英]no persistence provider for entitymanager error JPA/hibernate
我想使用JPA /休眠添加數據庫並保留數據。 我在正確的位置安裝了persistence.xml,但出現“沒有為Entitymanager提供持久性的提供程序”錯誤。 數據庫在mysql中。 任何建議深表感謝。 這是我的代碼:
資料夾結構:
servlet的:
@WebServlet("/Reservations")
public class Reservations extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
if( request != null) {
Enumeration<String> names = request.getParameterNames();
while(names.hasMoreElements()) {
String name = names.nextElement();
System.out.println(name + " : " + request.getParameter(name));
}
String pickUpDate = request.getParameter("pickUpDate");
Integer totalPass = Integer.parseInt(request.getParameter("totalPass"));
ReservationEntity reservation = new ReservationEntity(pickUpDate, totalPass);
ReservationSevice reservationSevice = new ReservationSevice();
reservationSevice.createReservation(reservation);
}else{
System.out.println("#############Request is null#########");
}
}
catch (Exception e){
e.printStackTrace();
System.out.println("Exception occured");
}
}
}
實體類:
@Entity
@Table(name = "reservations_db")
public class ReservationEntity {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "pickUpDate")
private String pickUpDate;
@Column(name = "totalPass")
private Integer totalPass;
public ReservationEntity()
{
}
public ReservationEntity(String pickUpDate, Integer totalPass)
{
this.setPickUpDate(pickUpDate);
this.setTotalPass(totalPass);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPickUpDate() {
return pickUpDate;
}
public void setPickUpDate(String pickUpDate) {
this.pickUpDate = pickUpDate;
}
public Integer getTotalPass() {
return totalPass;
}
public void setTotalPass(Integer totalPass) {
this.totalPass = totalPass;
}
}
JPA持久性的服務類:
public class ReservationSevice
{
static EntityManagerFactory emf = Persistence.createEntityManagerFactory("ReservationsPU");
private static EntityManager em = emf.createEntityManager();
public void createReservation (ReservationEntity reservation)
{
em.getTransaction().begin();
em.persist(reservation);
em.getTransaction().commit();
}
}
persistence.xml中:
<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="ReservationsPU">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/world" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="password" />
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
錯誤:
javax.persistence.PersistenceException: No Persistence provider for EntityManager named ReservationsPU
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at com.welcomelimo.service.ReservationSevice.<init>(ReservationSevice.java:11)
at com.welcomelimo.controller.Reservations.doPost(Reservations.java:56)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Exception occured
更新
我要添加lib文件夾,以顯示為該項目添加的jar文件,因為我沒有使用maven。
更新2
我最終使用了maven,現在可以正常工作了。 對於pom.xml,請參見下面的@Surace答案。
將您的persistence.xml更改為
<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="ReservationsPU">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/world" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="password" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.show_sql" value="true" />
<property name="use_sql_comments" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
如果您正在使用Maven,請在pom.xml中添加以下依賴項
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
</dependencies>
我認為這與日食有關。 如果Eclipse被明確設置為JPA項目,則僅允許運行JPA。
通過在資源管理器中打開上下文菜單,可以將項目轉換為JPA項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.